4236 - Bacterie1: Difference between revisions
Pagină nouă: == 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; * aceas... |
No edit summary |
||
(2 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
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 == | == Cerinţa == | ||
Scrieţi un program care să determine numărul de comitate rămase neinfectate după oprirea expansiunii bacteriei. | Scrieţi un program care să determine numărul de comitate rămase neinfectate după oprirea expansiunii bacteriei. | ||
Line 8: | Line 11: | ||
* '''1 ≤ n ≤ 1.000.000.000, 1 ≤ m ≤ 1.000.000.000''', numere naturale; | * '''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. | * aceasta este problema #Bacterie , dar opeațiile de intrare/ieșire se fac cu consola. | ||
== | == Exemplul 1 == | ||
; Intrare | ; Intrare | ||
: 3 5 | : 3 5 | ||
; Ieșire | ; Ieșire | ||
: Datele introduse corespund restricțiilor impuse. | |||
: 9 | : 9 | ||
== Exemplul 2 == | |||
; Intrare | |||
: n | |||
; Ieșire | |||
: Datele introduse nu corespund restricțiilor impuse. | |||
== Explicație == | == 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. | 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. | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
def 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 | # Numarul total de comitate este n * m | ||
total = | total = n1 * m1 | ||
# Numarul de comitate infectate este egal cu numarul de comitate de pe margini | # Numarul de comitate infectate este egal cu numarul de comitate de pe margini | ||
infectate = 2 * ( | infectate = 2 * (n1 + m1 - 5) | ||
# Numarul de comitate neinfectate este totalul minus cele infectate | # Numarul de comitate neinfectate este totalul minus cele infectate | ||
neinfectate = total - infectate | neinfectate = total - infectate | ||
return neinfectate | return neinfectate | ||
if __name__ == "__main__": | if __name__ == "__main__": | ||
# Citim datele de intrare | 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.") | |||
print( | # 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.") | |||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 09:10, 16 November 2023
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]
Programul citește de la tastatura numerele n m, dimensiunile hărții.
Date de ieşire[edit | edit source]
Programul va afișa pe ecran 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, numere naturale;
- aceasta este problema #Bacterie , dar opeațiile de intrare/ieșire se fac cu consola.
Exemplul 1[edit | edit source]
- Intrare
- 3 5
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- 9
Exemplul 2[edit | edit source]
- Intrare
- n
- Ieșire
- Datele introduse nu corespund restricțiilor impuse.
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. <syntaxhighlight lang="python" line>
- 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.")
</syntaxhighlight>