Rezolvare completă PbInfo #2896 binar1

Pentru a converti un număr din zecimal în binar îl vom împărți la 2 în mod repetat, până ce obținem câtul zero. Apoi vom colecta resturile obținute de la ultimul către primul. Aceste resturi sunt cifrele din reprezentarea binară a numărului dat, de la stânga la dreapta. De exemplu, 13(10) = 1101(2).

Cerința

Scrieți un program care, pentru un șir dat de n numere naturale, rezolvă următoarele cerințe:
1) Determină cel mai mare dintre cele n numere date ce are număr maxim de valori de 1 în reprezentarea binară.
2) Determină cea mai lungă secvență de numere care au număr egal de valori de 1 în reprezentarea binară. Dacă sunt mai multe astfel de secvențe de lungime maximă, se va alege cea mai din stânga. O secvență este un subșir de numere care apar pe poziții consecutive în șirul inițial.

Date de intrare

Fișierul de intrare binar.in conţine pe prima linie numărul C reprezentând cerința (1 sau 2), pe a doua linie numărul natural n, iar pe a treia linie n numere naturale separate prin câte un spațiu.

Date de ieșire

Dacă C = 1, atunci pe prima linie a fișierului de ieșire binar.out se va scrie numărul ce reprezintă răspunsul la cerința 1. Dacă C = 2, atunci pe prima linie a fișierului de ieșire binar.out se vor scrie, separate printr-un spațiu, lungimea maximă a secvenței determinate și poziția primului termen din secvență (se consideră că primul număr din cele n numere date se găsește pe poziția 1).

Restricții și precizări

  • 1 ≤ n ≤ 1.000.000
  • Valorile din șirul de intrare sunt numere naturale de cel mult nouă cifre.
  • Pentru 30% din teste cerința va fi C = 1.
  • În concurs s-au acordat 10 puncte din oficiu. Aici se acordă pentru testele din enunț.

Exemplul 1:

binar.in

1
7
16 12 3 5 14 13 11

binar.out

14

Explicație

16(10) = 10000(2); 12(10) = 1100(2); 3(10) = 11(2); 5(10) = 101(2); 14(10) = 1110(2); 13(10) = 1101(2); 11(10) = 1011(2);
Cel mai mare număr de valori de 1 dintr-o reprezentare binară este 3; cel mai mare număr ce are 3 de 1 în reprezentarea binară este 14.

Exemplul 2:

binar.in

2
7
16 12 3 5 14 13 11

binar.out

3 2

Explicație

Sunt două secvențe de lungime maximă de numere care au număr egal de valori de 1 în reprezentarea binară: 12 3 5 și 14 13 11. O vom alege pe cea mai din stânga, care are lungimea 3 și începe la poziția 2.

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 binar1:

#include <fstream>
#define NM 1000001
using namespace std;
int a[NM],c,n;
ifstream fin("binar.in");
ofstream fout("binar.out");
int main()
{
    int lgc,lgm,pc,pm,nr1,nr1max,xmax,x,i,aux;
    fin>>c>>n;
    xmax=0;
    nr1max=0;
    for(i=1;i<=n;i++)
    {
        fin>>x;
        aux=x;
        nr1=0;
        while(aux>0)
        {
            nr1++;
            aux=(aux&(aux-1));
        }
        if(nr1>nr1max || nr1==nr1max && x>xmax)
        {
            nr1max=nr1;
            xmax=x;
        }
       a[i]=nr1;
    }
    if(c==1)
    {
        /// cerinta 1
        fout<<xmax;
        return 0;
    }
    ///cerinta 2
    lgm=0;
    lgc=1;
    pc=1;
    for(i=2;i<=n;i++)
        if(a[i]==a[i-1])lgc++;
        else
        {
            if(lgc>lgm)
            {
                lgm=lgc;
                pm=pc;
            }
            lgc=1;
            pc=i;
        }
        if(lgc>lgm)
            {
                lgm=lgc;
                pm=pc;
            }
        fout<<lgm<<' '<<pm;
    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 #2896 binar1

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2896 binar1 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!