Pagini recente » Cod sursa (job #2087075) | Cod sursa (job #2251719) | Cod sursa (job #2534883) | Cod sursa (job #1855581) | Cod sursa (job #2322796)
#include <fstream>
using namespace std;
ifstream fin("pavare2.in");
ofstream fout("pavare2.out");
long long a[101][101],b[101][101],x,nrOrd;
int stare,n,ma,mb,k;
//op pe numere mari
/*
int suma(int v1[][],v2[][],v3[][])
{
}
int diferenta(int v1[][],v2[][],v3[][])
{
}
int comparare(int v1[][],v2[][],v3[][])
{
}
*/
int main()
{
fin>>n>>ma>>mb>>nrOrd;
a[0][0]=b[0][0]=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=min(ma,i);j++)
{
a[i][j]=b[i-j][0];
a[i][0]+=a[i][j];
}
for(int j=1;j<=min(mb,i);j++)
{
b[i][j]=a[i-j][0];
b[i][0]+=b[i][j];
}
}
fout<<a[n][0]+b[n][0]<<'\n';
stare=0;
x=n;
while(x)
{
if(stare==0)
{
if(nrOrd>a[x][0])
nrOrd-=a[x][0];
else
{
int j;
for(j=ma;a[x][j]<nrOrd&&j>=1;j--)
nrOrd-=a[x][j];
if(j>=1)
{
for(int l=1;l<=j;l++)
fout<<0;
x-=j;
}
}
}
else
{
if(nrOrd>b[x][0])
nrOrd-=b[x][0];
else
{
int j;
for(j=1;b[x][j]<nrOrd&&j<=mb;j++)
nrOrd-=b[x][j];
if(j>=1)
{
for(int l=1;l<=j;l++)
fout<<1;
x-=j;
}
}
}
stare=!stare;
}
return 0;
}