Radu are o grămadă de bețișoare de două mărimi diferite. Cele cu mărime mai mică sunt marcate cu 0
și vom spune că sunt de tipul 0
, iar celelalte sunt marcate cu 1
și vom spune că sunt de tipul 1
. Grămada are N
bețișoare, N
număr natural. Radu se gândește să așeze pe un singur rând toate bețișoarele din grămadă, unul după altul, astfel încât bețișoarele formează secvențe de cifre 0
și 1
. Apoi își propune să determine numărul total de secvențe care conțin un număr maxim de bețișoare de aceeași mărime.
Cerința
Scrieți un program care să citească numărul natural N
și mărcile bețișoarelor, iar apoi să determine secvențele ce conțin un număr maxim de bețișoare de același tip.
Date de intrare
Fișierul de intrare betisoare1.in
conține pe prima linie numărul natural N
reprezentând numărul de bețișoare din grămadă, iar pe linia următoare cele N
mărci ale bețișoarelor b[1]
, b[2]
,…, b[N]
fără spații.
Date de ieșire
Fișierul de ieșire betisoare1.out
va conține pe prima linie marca secvenței de bețișoare cu lungimea maximă, urmată de spațiu și apoi numărul maxim de bețișoare din secvența. Pe rândul următor se va afișa numărul de secvențe cu proprietatea cerută. Dacă există secvențe cu același număr maxim de bețișoare de tipul 0
și 1
, se va afișa secvența de tipul 1
.
Restricții și precizări
1 ≤ N ≤ 1000
0 ≤ b[i] ≤ 1
, (1 ≤ i ≤ N
)
Exemplul 1:
betisoare1.in
10 0100011000
betisoare1.out
0 3 2
Explicație
Secvența cea mai lungă cu bețișoare având aceeași marcă, este secvența formată cu bețișoare de tipul 0
. Numărul maxim de bețișoare din secvență este 3
. Există două asemenea secvențe.
Exemplul 2:
betisoare1.in
17 101111000011110000
betisoare1.out
1 4 2
Explicație
Secvenţa cea mai lungă cu beţişoare având aceeaşi marcă, este secvenţa formată cu beţişoare de tipul 0
, dar şi de tipul 1
. Numărul maxim de beţişoare din secvenţă este 4
. Există două asemenea secvenţe.
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 betisoare1:
#include <fstream>
using namespace std;
ifstream fin("betisoare1.in");
ofstream fout("betisoare1.out");
int main() {
int N;
char prec, tip;
fin >> N;
fin >> prec;
tip = prec;
char x;
int lg = 1, nr = 0, mx = 0;
for(int i = 1; i <= N; ++i) {
if(i < N) fin >> x;
else x = (prec == '0' ? '1' : '0');
if(x != prec) {
if(mx < lg) {
mx = lg;
tip = prec;
nr = 1;
}
else {
if(mx == lg && tip == prec) {
++nr;
}
else {
if(mx == lg && tip < prec) {
nr = 1;
tip = prec;
}
}
}
lg = 1;
}
else {
++lg;
}
prec = x;
}
fout << tip << ' ' << mx << '\n' << nr << '\n';
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 #2183 betisoare1
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2183 betisoare1 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!