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 fiC = 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 .
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!