Pagini recente » Cod sursa (job #2055169) | Cod sursa (job #1434441) | Cod sursa (job #2036097) | Cod sursa (job #2473994) | Cod sursa (job #1010840)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("pavare2.in");
ofstream g("pavare2.out");
long long k,a[105][105],b[105][105],sa[105],sb[105];
int n,x,y;
void Dinamic()
{ int i,j;
a[1][1]=1; sa[1]=1;
b[1][1]=1; sb[1]=1;
for(i=2;i<=n;i++)
{ if (i<=x) {a[i][x]=1; sa[i]=1;}
if (i<=y) {b[i][y]=1; sb[i]=1;}
for(j=1;j<=min(x,i-1);j++)
{a[i][j]=1LL*sb[i-j]; sa[i]+=1LL*a[i][j];}
for(j=1;j<=min(y,i-1);j++)
{b[i][j]=1LL*sa[i-j]; sb[i]+=1LL*b[i][j];}
}
g<<(long long) sa[n]+sb[n]<<"\n";
}
void Reconstruct()
{ long long i,j,len,nr=0,ok=0,scad,semn=0;
len=n; semn=0;
while(len)
{ ok=0; scad=0; nr=0;
if (!semn || semn==1)
for(i=x;i>=1;i--)
{ nr+=a[len][i];
if (nr>=k) {ok=1; len-=i; for(j=1;j<=i;j++) g<<"0"; semn=2; break; }
else scad+=a[len][i];
}
//cout<<scad<<"\n";
if (!ok && (!semn || semn==2))
{
for(i=1;i<=y;i++)
{ nr+=b[len][i];
if (nr>=k) {ok=1; len-=i; for(j=1;j<=i;j++) g<<"1"; semn=1; break;}
else scad+=b[len][i];
}
}
k-=scad;
//cout<<scad<<"\n";
}
}
int main()
{ int i,j;
f>>n>>x>>y>>k;
Dinamic();
Reconstruct();
//cout<<a[3][2];
return 0;
}