Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- using namespace std;
- int F[31];
- void scrie_in_vector(int n) /// Memoreaza in vectorul de frecventa F valorile citite (exponentii)
- {
- int exp=-1;
- while(n)
- ++exp,n/=2;
- ++F[exp];
- }
- int main()
- {
- int n,m;
- ifstream f("2lap.in");
- f>>n>>m;
- int x;
- while(f>>x)
- scrie_in_vector(x);
- f.close();
- /// Pentru pozitia lui n
- int i=0,pozn=1,nr=0,cate=0; /// cate- retine cate valori egale au fost numarate pana la n sau m
- while(pozn<=n) /// Cat timp n-am ajuns la pozitia n
- {
- nr=F[i]; /// Retinem in nr numarul de valori 2^i
- cate=0;
- while(nr&&pozn<=n) /// Cat timp inca n-am ajuns la pozitia n a numerelor
- ++pozn,++cate,--nr;
- ++i; /// Trecem la urmatorul exponent i
- }
- int pozvn=--i,plus_dupa_n=nr; /// pozvn=pozitia in vectorul F a celei de-a n-a valoare
- /// plus_dupa_n retine cate valori sunt dupa cea de-a n-a valoare si egale cu ea
- /// Pentru pozitia lui m
- i=0;
- int pozm=1;
- while(pozm<=m) /// Cat timp n-am ajuns la pozitia m
- {
- cate=0;
- nr=F[i]; /// Retinem in nr numarul de exponenti i ai lui 2
- while(nr&&pozm<=m) /// Cat timp inca n-am ajuns la pozitia m a numerelor
- ++pozm,++cate,--nr;
- ++i; /// Trecem la urmatorul exponent i
- }
- int pozvm=--i,plus_inainte_de_m=0; /// pozvm=pozitia in vectorul F a celei de-a m-a valoare
- if(cate>1)
- plus_inainte_de_m=F[i]-nr-1; /// retine cate valori sunt inaintea celei de-a m-a valoare si egale cu ea
- ofstream g("2lap.out");
- g<<(1<<pozvn)<<' '<<(1<<pozvm)<<'\n'; /// Cerinta 1
- int s=0; /// Cerinta 2
- if(plus_dupa_n)
- {
- if(pozvn==pozvm)
- s+=pozvn*(m-n-1);
- else
- s+=pozvn*plus_dupa_n;
- }
- for(int k=pozvn+1;k<pozvm;++k)
- s+=k*F[k];
- if(plus_inainte_de_m&&pozvn!=pozvm)
- s+=pozvm*plus_inainte_de_m;
- g<<s<<'\n';
- if(plus_dupa_n) /// Cerinta 3
- g<<(1<<pozvn)<<' ';
- for(int k=pozvn+1;k<pozvm;++k)
- if(F[k])
- g<<(1<<k)<<' ';
- if(plus_inainte_de_m&&pozvn!=pozvm)
- g<<(1<<pozvm)<<' ';
- g.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement