1943 - Bacterie: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Cerința ==
== 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


;Scrieţi un program care să determine numărul de comitate rămase neinfectate după oprirea expansiunii bacteriei.
== 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 bacterie.in conține separate printr-un spaţiu, n și m, dimensiunile hărții.
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 bacterie.out va conține numărul de comitate rămase neinfectate după oprirea expansiunii bacteriei.
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


== Exemplu 1 ==
== Exemplul 1 ==
; Intrare
; Intrare
; bacteriein.txt
; bacteriein.txt
: 3 5  
: 3 5  
; Ieșire
; Ieșire
: Datele de intrare corespund restricțiilor impuse
; bacterieout.txt
; bacterieout.txt
: 9
: 9
<br>
 
== Exemplu 2 ==
=== 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
; bacteriein.txt
; bacteriein.txt
: 1000000001  
: 1000000001 1000000001
: 1000000001
; Ieșire
; Ieșire
: Dimensiunile hărții trebuie să fie în intervalul specificat!
: Datele de intrare NU corespund restricțiilor impuse
<br>
<br>
== Rezolvare ==
== Rezolvare ==
Line 36: Line 40:
#1943 - Bacterie
#1943 - Bacterie
def verifica_restrictii(n, m):
def verifica_restrictii(n, m):
     if not (1 <= n <= 1000000000 and 1 <= m <= 1000000000):
     if 1 <= n <= 1000000000 and 1 <= m <= 1000000000:
         print("Dimensiunile hărții trebuie să fie în intervalul specificat!")
        print("Datele de intrare corespund restricțiilor impuse")
    else:
         print("Datele de intrare NU corespund restricțiilor impuse")
        exit(0)




Line 48: 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 62: 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>

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


  1. Citire din fișierul de intrare

with open("bacteriein.txt", "r") as file_in:

   n, m = map(int, file_in.readline().split())
  1. 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>