1943 - Bacterie: Difference between revisions
No edit summary |
No edit summary |
||
(4 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
== | == 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. | 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 | Î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 == | == Date de intrare == | ||
Fișierul 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 == | == Date de ieșire == | ||
Fișierul 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 == | == Restricții și precizări == | ||
Line 16: | Line 17: | ||
* 1 ⩽ '''m''' ⩽ 1.000.000.000 | * 1 ⩽ '''m''' ⩽ 1.000.000.000 | ||
== | == Exemplul 1 == | ||
; Intrare | ; Intrare | ||
; | ; bacteriein.txt | ||
: 3 5 | : 3 5 | ||
; Ieșire | ; Ieșire | ||
; | : Datele de intrare corespund restricțiilor impuse | ||
; bacterieout.txt | |||
: 9 | : 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 | ; Intrare | ||
: 1000000001 | ; bacteriein.txt | ||
: 1000000001 1000000001 | |||
; Ieșire | ; Ieșire | ||
: | : Datele de intrare NU corespund restricțiilor impuse | ||
<br> | <br> | ||
== Rezolvare == | == Rezolvare == | ||
Line 35: | Line 40: | ||
#1943 - Bacterie | #1943 - Bacterie | ||
def verifica_restrictii(n, m): | def verifica_restrictii(n, m): | ||
if | if 1 <= n <= 1000000000 and 1 <= m <= 1000000000: | ||
print(" | print("Datele de intrare corespund restricțiilor impuse") | ||
else: | |||
print("Datele de intrare NU corespund restricțiilor impuse") | |||
exit(0) | |||
Line 47: | Line 55: | ||
while an <= n: | while an <= n: | ||
infectate += an | infectate += an # comitate infectate într-un an | ||
an += 1 | an += 1 | ||
comitate_ramase = total_comitate - infectate | comitate_ramase = total_comitate - infectate | ||
Line 61: | Line 69: | ||
rezultat = numar_comitate_ramase_neinfectate(n, m) | rezultat = numar_comitate_ramase_neinfectate(n, m) | ||
file_out.write(str(rezultat)) | file_out.write(str(rezultat)) | ||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 21:00, 10 December 2023
Enunț[edit | edit source]
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[edit | edit source]
Scrieţi un program care să determine numărul de comitate rămase neinfectate după oprirea expansiunii bacteriei.
Date de intrare[edit | edit source]
Fișierul de intrare bacteriein.txt conține separate printr-un spaţiu, n și m, dimensiunile hărții.
Date de ieșire[edit | edit source]
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[edit | edit source]
- 1 ⩽ n ⩽ 1.000.000.000
- 1 ⩽ m ⩽ 1.000.000.000
Exemplul 1[edit | edit source]
- Intrare
- bacteriein.txt
- 3 5
- Ieșire
- Datele de intrare corespund restricțiilor impuse
- bacterieout.txt
- 9
Explicație[edit | edit source]
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[edit | edit source]
- Intrare
- bacteriein.txt
- 1000000001 1000000001
- Ieșire
- Datele de intrare NU corespund restricțiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 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))
</syntaxhighlight>