Rezolvare completă PbInfo #2183 betisoare1

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

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!