2356 - pinguini: Difference between revisions

From Bitnami MediaWiki
 
(2 intermediate revisions by the same user not shown)
Line 26: Line 26:
: 12
: 12
: 1 2 1 2 2 2 2 1 1 2 2 2
: 1 2 1 2 2 2 2 1 1 2 2 2
; Ieșire
; pinguiniout.txt
: Datele de intrare corespund restricțiilor impuse
: Datele de intrare corespund restricțiilor impuse
; pinguiniout.txt
: 8
: 8


Line 40: Line 39:
: 12
: 12
: 1 2 1 2 2 2 2 1 1 2 2 2
: 1 2 1 2 2 2 2 1 1 2 2 2
; Ieșire
; pinguiniout.txt
: Datele de intrare corespund restricțiilor impuse
: Datele de intrare corespund restricțiilor impuse
; pinguiniout.txt
: 3
: 3


Line 54: Line 52:
: 12
: 12
: 1 2 1 2 2 2 2 1 1 2 2 2
: 1 2 1 2 2 2 2 1 1 2 2 2
; Ieșire
; pinguiniout.txt
: Datele de intrare corespund restricțiilor impuse
: Datele de intrare corespund restricțiilor impuse
; pinguiniout.txt
: 4
: 4



Latest revision as of 09:33, 29 December 2023

Enunț[edit | edit source]

În vecinătatea lui Moș Crăciun se află o fâșie liniară formată din N zone identice de gheață. Pe această fâșie trăiesc mai mulți pinguini. Din cauza încălzirii globale zonele de gheața pe care nu se aflau pinguini s-au topit și au rămas mai multe grupuri de pinguini izolate. Moș Crăciun dorește să salveze pinguinii, dar mai întâi trebuie sa afle răspunsul la câteva întrebări.

Cerința[edit | edit source]

Cunoscând N, numărul zonelor din fâșia liniară și fiecare tip de zonă: apa (1), pinguin (2) să se determine:
1) Câți pinguini trebuie să salveze Moș Crăciun;
2) Câte grupuri izolate de pinguini sunt;
3) Care este numărul maxim de pinguini care se află în același grup.

Date de intrare[edit | edit source]

În fișierul pinguiniin.txt se află pe prima linie c, un număr natural reprezentând cerința, pe a doua linie se află N, un număr natural reprezentând numărul de zone din fâșia liniară și pe următoarea linie se află N numere naturale a1, a2, …, an din mulțimea {1, 2} cu semnificația din enunț ( 1 – apă, 2 – pinguin).

Date de ieșire[edit | edit source]

În fișierul pinguiniout.txt se va afla un singur număr natural K. Dacă cerința c = 1, K va reprezenta numărul de pinguini ce trebuie salvați. Dacă cerința c = 2, K va reprezenta numărul de grupuri izolate de pinguini. Dacă cerința c = 3, K va reprezenta numărul maxim de pinguini care se află în același grup.

Restricții și precizări[edit | edit source]

  • 1 ⩽ n, k ⩽ 10.000

Exemplul 1[edit | edit source]

Intrare
pinguiniin.txt
1
12
1 2 1 2 2 2 2 1 1 2 2 2
pinguiniout.txt
Datele de intrare corespund restricțiilor impuse
8

Explicație[edit | edit source]

c = 1. Numărul de pinguini ce trebuie salvați este 8.

Exemplul 2[edit | edit source]

Intrare
pinguiniin.txt
2
12
1 2 1 2 2 2 2 1 1 2 2 2
pinguiniout.txt
Datele de intrare corespund restricțiilor impuse
3

Explicație[edit | edit source]

c = 2. Numărul de grupuri izolate este 3.

Exemplul 3[edit | edit source]

Intrare
pinguiniin.txt
3
12
1 2 1 2 2 2 2 1 1 2 2 2
pinguiniout.txt
Datele de intrare corespund restricțiilor impuse
4

Explicație[edit | edit source]

c = 3. Numărul maxim de pinguini dintr-un grup este 4.

Exemplul 4[edit | edit source]

Intrare
pinguiniin.txt
2
10001
1 2 1 2 2 2 2 1 1 2 2 2 ...
Ieșire

Datele de intrare NU corespund restricțiilor impuse

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 2356 - Pinguini

def validare_date(n, zone):

   if not (1 <= n <= 10000):
       return False
   if len(zone) != n or not all(x in {1, 2} for x in zone):
       return False
   return True


def salvare_pinguini(n, zone):

   numar_pinguini = zone.count(2)
   return numar_pinguini


def grupuri_izolate(n, zone):

   grupuri = 0
   i = 0
   while i < n:
       if zone[i] == 2:
           grupuri += 1
           while i < n and zone[i] == 2:
               i += 1
       else:
           i += 1
   return grupuri


def max_pinguini_grup(n, zone):

   max_pinguini = 0
   pinguini_curenti = 0
   for zona in zone:
       if zona == 2:
           pinguini_curenti += 1
           max_pinguini = max(max_pinguini, pinguini_curenti)
       else:
           pinguini_curenti = 0
   return max_pinguini


if __name__ == "__main__":

   with open("pinguiniin.txt", "r") as f:
       cerinta = int(f.readline().strip())
       n = int(f.readline().strip())
       zone = list(map(int, f.readline().strip().split()))
   rezultat = 0
   if not validare_date(n, zone):
       print("Datele de intrare NU corespund restricțiilor impuse")
   else:
       print("Datele de intrare corespund restricțiilor impuse")
       if cerinta == 1:
           rezultat = salvare_pinguini(n, zone)
       elif cerinta == 2:
           rezultat = grupuri_izolate(n, zone)
       elif cerinta == 3:
           rezultat = max_pinguini_grup(n, zone)
       with open("pinguiniout.txt", "w") as f_out:
           f_out.write(str(rezultat))

</syntaxhighlight>