4
#include<fstream> #include<cmath> #include<iostream> using namespace std; ifstream fin("hercule.in"); ofstream fout("hercule.out"); int putere(int a, int b){ int p; p=1; if(b==0) p=1; else while(b!=0){ p=p*a; b-=1; } return p; } int main (){ int T; fin>>T; for(int l=1; l<=T; l++) { int k;

Hercule

Embed Size (px)

DESCRIPTION

Algoritm in C++; urmeaza a fi imbunatatit

Citation preview

Page 1: Hercule

#include<fstream>

#include<cmath>

#include<iostream>

using namespace std;

ifstream fin("hercule.in");

ofstream fout("hercule.out");

int putere(int a, int b){

int p;

p=1;

if(b==0)

p=1;

else

while(b!=0){

p=p*a;

b-=1;

}

return p;

}

int main (){

int T;

fin>>T;

for(int l=1; l<=T; l++) {

int k;

fin>>k;

int v[1000000005];

Page 2: Hercule

for(int j=1; j<=k; j++)

v[k]=0;

double a;

a = (log(k)*1.0)/log(2);

// caz particular 2^a

if ( int(a) == a)

for(int p=0; p<=a-1; p++)

v[putere(2,p)] = 1;

a=int (a);

for(int p=0; p<=a-1; p++)

v[putere(2,p)] = 1;

int b;

int c;

c = int(a);

b=k-putere(2,c);

cout<<b<<" ";

v[b]=1;

for(int i=0; i<=c-1; i++)

if(b==putere(2,i))

{

v[b]=0;

for(int j=1; j <= putere(2, c-2)-1; j++)

if(putere(2,c-1)+j+b<k)

if (v[putere(2,c-1)-j] == 0 && v[putere(2,c-1)+j+b]== 0)

{

v[putere(2,c-1)-j] = 1;

v[putere(2, c-1)+j+b] = 1;

break;

}

Page 3: Hercule

}

int sum=1;

int taieturi=0;

for(int i=1; i<=k; i++)

if(v[i]==1)

{

sum += i;

taieturi++;

}

if (sum==k)

{

fout<<taieturi<<'\n';

for(int i=1; i<=k; i++)

if(v[i]==1)

fout << i << " ";

}

else fout<<"-1";

fout<<'\n';

}

Page 4: Hercule

}