Pagini recente » Cod sursa (job #2339129) | Cod sursa (job #2790233) | Cod sursa (job #110074) | Cod sursa (job #552499) | Cod sursa (job #8804)
Cod sursa(job #8804)
#include<stdio.h>
typedef int lnum[100];
const int maxn = 101;
lnum a[maxn][maxn][3];
int nr[maxn];
int i;
int j;
int k;
lnum k2;
lnum sum;
int n;
void scadere(lnum &a,lnum &b,lnum &c)
{
int i;
int last;
for(i=b[0];i>0;i--)
{
a[i]=b[i]-c[i];
if (a[i]<0)
{
a[last]--;
a[i]+=10;
}
if (a[i]>0) last=i;
}
a[0]=b[0];
while(a[a[0]]==0)
{
a[0]--;
}
}
bool cmp(lnum &a,lnum &b)
{
if (a[0]!=b[0]) return a[0]<b[0];
for(i=a[0];i>0;i--)
{
if (a[i]!=b[i]) return a[i]<b[i];
}
return true;
}
void ad(lnum &a,lnum &b,lnum &c)
{
int t=0;
int i;
for(i=1;i<=b[0]||i<=c[0]||t;i++)
{
t+=b[i]+c[i];
a[i]=t%10;
t/=10;
}
i--;
a[0]=i;
}
int main()
{
freopen("pavare2.in","r",stdin);
freopen("pavare2.out","w",stdout);
scanf("%d %d %d %d",&n,&nr[0],&nr[1],&k);
while(k)
{
k2[0]++;
k2[k2[0]]=k%10;
k/=10;
}
a[1][1][0][0]=1;
a[1][1][0][1]=1;
a[1][1][1][0]=1;
a[1][1][1][1]=1;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
for(k=0;k<=1;k++)
{
if (j+1<=nr[k]) ad(a[i+1][j+1][k],a[i+1][j+1][k],a[i][j][k]);
ad(a[i+1][1][k^1],a[i+1][1][k^1],a[i][j][k]);
}
}
for(i=1;i<=n;i++)
for(k=0;k<=1;k++)
ad(sum,sum,a[n][i][k]);
for(i=sum[0];i>0;i--)
printf("%d",sum[i]);
printf("\n");
int i1;
i1=n;
while(i1)
{
for(i=1;i<=sum[0];i++)
sum[i]=0;
sum[0]=0;
for(i=1;i<=n;i++)
ad(sum,sum,a[i1][i][0]);
if (cmp(sum,k2))
{
printf("1");
scadere(k2,k2,sum);
}
else
{
printf("0");
}
i1--;
}
printf("\n");
return 0;
}