Î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
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
În fișierul pinguini.in
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
În fișierul pinguini.out
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
1 ≤ n, k ≤ 10 000
- Pentru prima cerință se acordă
10
puncte - Pentru a doua cerință se acordă
30
de puncte - Pentru a treia cerință se acordă
50
de puncte - În concurs s-au acordat
10
puncte din oficiu. Aici se acordă10
puncte pentru cele trei exemple.
Exemplul 1:
pinguini.in
1 12 1 2 1 2 2 2 2 1 1 2 2 2
pinguini.out
8
Explicație
c = 1
. Numărul de pinguini ce trebuie salvați este 8
.
Exemplul 2:
pinguini.in
2 12 1 2 1 2 2 2 2 1 1 2 2 2
pinguini.out
3
Explicație
c = 2
. Numărul de grupuri izolate este 3
.
Exemplul 3:
pinguini.in
3 12 1 2 1 2 2 2 2 1 1 2 2 2
pinguini.out
4
Explicație
c = 3
. Numărul maxim de pinguini dintr-un grup este 4
.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema pinguini:
#include <fstream>
using namespace std;
ifstream fin("pinguini.in");
ofstream fout("pinguini.out");
int n, a[10001], i,lg,lgmax,nrp,nrg,c;
int main()
{
fin>>c>>n;
for(i=1;i<=n;i++)
{
fin>>a[i];
if(a[i]==2)nrp++;
}
if(a[1]==1)nrg=0;
else nrg=1;
for(i=2;i<=n;i++)
if(a[i]==2&&a[i-1]==1)nrg++;
lg=lgmax=0;
for(i=1;i<=n;i++)
if(a[i]==2)lg++;
else
{
if(lg>lgmax)lgmax=lg;
lg=0;
}
if(lg>lgmax)lgmax=lg;
if(c==1)fout<<nrp<<endl;
if(c==2)fout<<nrg<<endl;
if(c==3)fout<<lgmax<<endl;
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #2356 pinguini
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2356 pinguini de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!