Rezolvare completă PbInfo #1727 Culori3

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ţin C 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 Adresa de email.

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!