4236 - Bacterie1: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
 
(One intermediate revision 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 22: Line 25:
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>
# 4236 - Bacterie1
def verificare_restrictii(n1, m1):
def verificare_restrictii(n1, m1):
     # functia de verificare a datelor de intrare
     # functia de verificare a datelor de intrare

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>

  1. 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>