2356 - pinguini: Difference between revisions
Line 52: | 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 | ||
; | ; pinguiniout.txt | ||
: Datele de intrare corespund restricțiilor impuse | : Datele de intrare corespund restricțiilor impuse | ||
: 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>
- 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>