4236 - Bacterie1
O echipă de arheologi a descoperit o hartă străveche a Ținutului de Nord, care era locuit de o civilizație condusă după reguli matematice foarte riguroase. Conform acestei hărți, Ținutul de Nord era împărțit în n rânduri a câte m comitate, fiecare comitat ocupând o suprafață pătrată de un hectar.
Însă descoperirile au mai arătat că această civilizație a fost atacată de la sud-vest de o bacterie periculoasă, ce a acționat astfel: în primul an, a infectat comitatul din colțul din stânga jos al hărții, în al doilea an a infectat cele două comitate vecine cu primul, în al treilea an a infectat cele trei comitate vecine cu anterioarele două și așa mai departe, infecția oprindu-se când bacteria a ajuns la marginea de sus sau la marginea din dreapta a hărții.
Cerinţa
Scrieţi un program care să determine numărul de comitate rămase neinfectate după oprirea expansiunii bacteriei.
Date de intrare
Programul citește de la tastatura numerele n m, dimensiunile hărții.
Date de ieşire
Programul va afișa pe ecran numărul de comitate rămase neinfectate după oprirea expansiunii bacteriei.
Restricții și precizări
- 1 ≤ n ≤ 1.000.000.000, 1 ≤ m ≤ 1.000.000.000, numere naturale;
- aceasta este problema #Bacterie , dar opeațiile de intrare/ieșire se fac cu consola.
Exemplul 1
- Intrare
- 3 5
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- 9
Exemplul 2
- Intrare
- n
- Ieșire
- Datele introduse nu corespund restricțiilor impuse.
Explicație
Harta Ținutului de Nord cuprinde 3 rânduri a câte 5 comitate fiecare, având în total 15 comitate. Expansiunea bacteriei s-a oprit după 3 ani, deoarece a atins marginea de sus; au rămas 9 comitate neinfectate.
# 4236 - Bacterie1
def verificare_restrictii(n1, m1):
# functia de verificare a datelor de intrare
if 1 <= n1 <= 10**9 and 1 <= m1 <= 10**9:
return True
else:
return False
def comitate_neinfectate(n1, m1):
# Numarul total de comitate este n * m
total = n1 * m1
# Numarul de comitate infectate este egal cu numarul de comitate de pe margini
infectate = 2 * (n1 + m1 - 5)
# Numarul de comitate neinfectate este totalul minus cele infectate
neinfectate = total - infectate
return neinfectate
if __name__ == "__main__":
try:
# Citim datele de intrare
n, m = map(int, input().split())
if verificare_restrictii(n, m): # verificam datele de intrare
print("Datele de intrare corespund restrictiilor impuse.")
# Calculam numarul de comitate neinfectate
rezultat = comitate_neinfectate(n, m)
# Afisam rezultatul
print(rezultat)
else:
print("Datele de intrare nu corespund restrictiilor impuse.")
# ne asteptam la 2 tipuri de erori din cauza datelor de intrare, le tratam corespunzator
except ValueError:
print("Datele de intrare nu corespund restrictiilor impuse.")
except IndexError:
print("Datele de intrare nu corespund restrictiilor impuse.")