1943 - Bacterie

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Enunț

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

Fișierul de intrare bacteriein.txt conține separate printr-un spaţiu, n și m, dimensiunile hărții.

Date de ieșire

Fișierul de ieșire bacterieout.txt va conține 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

Exemplul 1

Intrare
bacteriein.txt
3 5
Ieșire
Datele de intrare corespund restricțiilor impuse
bacterieout.txt
9

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.

Exemplul 2

Intrare
bacteriein.txt
1000000001 1000000001
Ieșire
Datele de intrare NU corespund restricțiilor impuse


Rezolvare

#1943 - Bacterie
def verifica_restrictii(n, m):
    if 1 <= n <= 1000000000 and 1 <= m <= 1000000000:
        print("Datele de intrare corespund restricțiilor impuse")
    else:
        print("Datele de intrare NU corespund restricțiilor impuse")
        exit(0)


def numar_comitate_ramase_neinfectate(n, m):
    verifica_restrictii(n, m)

    total_comitate = n * m
    infectate = 0
    an = 1

    while an <= n:
        infectate += an  # comitate infectate într-un an
        an += 1
    comitate_ramase = total_comitate - infectate
    return comitate_ramase


# Citire din fișierul de intrare
with open("bacteriein.txt", "r") as file_in:
    n, m = map(int, file_in.readline().split())

# Calcul și scriere în fișierul de ieșire
with open("bacterieout.txt", "w") as file_out:
    rezultat = numar_comitate_ramase_neinfectate(n, m)
    file_out.write(str(rezultat))