Fiecare dintre cei N
copii, numerotați de la 1
la N
, primește câte un cartonaș colorat. Doamna dirigintă îi așează în cerc, în ordinea numerotării, în sens orar. Astfel, fiecare copil are doi vecini, așezați în stânga, respectiv în dreapta lui.
Andrei, pasionat de informatică, asociază fiecărei culori distincte un cod, reprezentat printr-un număr natural nenul, și inscripționează fiecare cartonaș cu codul corespunzător culorii acestuia.
Cerința
Scrieţi un program care citeşte două numere naturale N
şi K
şi determină pentru Andrei:
a) numărul copiilor din cerc care au cartonaşe de aceeaşi culoare cu cartonaşele vecinilor;
b) numărul maxim de cartonaşe de aceeaşi culoare ce sunt deţinute de copiii aşezaţi pe K
poziţii consecutive în cercul format.
Date de intrare
Fişierul de intrare culori.in
conţine pe prima linie numerele naturale N
şi K
, separate printr-un spaţiu, şi pe fiecare dintre următoarele N
linii, câte un număr natural. Cele N
numere reprezintă codurile culorilor cartonaşelor, în ordinea numerotării copiilor, începând cu copilul 1
.
Date de ieșire
Fişierul de ieşire culori.out
conţine:
pe prima linie, numărul natural determinat la cerinţa a);
pe a doua linie, numărul natural determinat la cerinţa b).
Restricții și precizări
2 < N ≤ 1000
2 < K ≤ N
- codurile culorilor sunt numere naturale nenule, consecutive, mai mici sau egale cu
100
- dacă
C
este codul maxim asociat unei culori (1 ≤ C ≤ 100
) atunci există cel puţinC
cartonaşe care au codurile distincte:1,2,3,…,C
.
Exemplu
culori.in
8 5 3 1 2 1 1 1 3 3
culori.out
2 4
Explicație
Sunt doi copii care au, fiecare, cartonaşe identice cu cei doi vecini (copilul 5
şi copilul 8
).
Numărul maxim de cartonaşe de aceeaşi culoare deţinute de copiii aşezaţi pe K = 5
poziţii consecutive în cercul format este 4
(dintre copiii 2,3,4,5,6
doar copiii 2,4,5
şi 6
au cartonaşe de culoarea 1
).
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 Culori3:
#include<fstream>
using namespace std;
int x[2001],apc[101],N,k,c,nrc,apc1[101],maxck,nrck,nrmax,nrmaxk;
ifstream fin("culori.in");
ofstream fout("culori.out");
void citire()
{int i;
fin>>N>>k;
fin>>x[1];
x[N+1]=x[1];
c=x[1];
fin>>x[2];
x[N+2]=x[2];
if(x[2]>c)c=x[2];
for(i=3;i<=N;i++)
{fin>>x[i];
x[N+i]=x[i];
if(x[i]>c)c=x[i];
if(x[i-1]==x[i-2]&&x[i]==x[i-1])
nrc++;
}
if(x[1]==x[N]&&x[N]==x[N-1])
nrc++;
if(x[1]==x[2]&&x[1]==x[N])
nrc++;
}
int main()
{int i,j;
citire();
maxck=0;
for(i=1;i<=k;i++)
{apc1[x[i]]++;
if(apc1[x[i]]>maxck)
maxck=apc1[x[i]];
}
for(i=2;i<=N;i++)
{apc1[x[i-1]]--;
apc1[x[i+k-1]]++;
for(j=1;j<=c;j++)
if(apc1[j]>maxck)
maxck=apc1[j];
}
fout<<nrc<<endl<<maxck<<endl;
fin.close();fout.close();
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 #1727 Culori3
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1727 Culori3 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!