Pagini recente » Cod sursa (job #2841452) | Cod sursa (job #760007) | Cod sursa (job #129426) | Cod sursa (job #1258323) | Cod sursa (job #89062)
Cod sursa(job #89062)
#include<stdio.h>
#define baza 1000000000
//#define baza 10
#define max 400
long v[32];
long t[10001][max+2];
void norm(long *a)
{
for(long i=max;i >= a[0]-1;i--)
{
a[i]+=a[i+1]/baza;
a[i+1]%=baza;
}
if(a[a[0]-1]) a[0]--;
}
void prod(long *a,long b,long *c)
{
long i;
for(i=a[0];i<=max;i++)
c[i] = a[i] * b;
c[0] = a[0];
norm(c);
}
void add(long *a,long *b)
{
for(long i=b[0]; i<= max;i++)
a[i]+=b[i];
a[0] = b[0];
norm(a);
}
void scade(long *a,long *b)
{
for(long i = max; i>= a[0];i--)
{
a[i]-=b[i];
if(a[i]<0) {a[i]+=baza; a[i-1]--;}
}
if(a[a[0]-1]==-1) {a[a[0]] =0;a[0]++;}
}
int main()
{
freopen("dame.in","r",stdin);
freopen("dame.out","w",stdout);
long n,k,s=0,nr;
scanf("%ld%ld",&n,&k);
long i;
/*while(v[0]==0)
{
for(i=n;i>=0;i--)
if(v[i]==0) {v[i]= 1;break;}
else v[i] = 0;
long ok = 1,nr =0;
for(i=1;i<=n;i++)
if(v[i]==1) {nr++;if(nr==k+1) ok = 0;}
else nr =0;
s+=ok;
}*/
t[1][0] = max;
t[1][max] = 2;
for(i = 2;i<=k+1 && i <= n;i++)
prod(t[i-1],2,t[i]);
if(i!=n+1)
{
t[--i][max]--;
for(i=1;i<=k+1;i++)
add(t[k+2],t[i]);
for(i=k+3;i<=n;i++)
{
add(t[i],t[i-1]);
add(t[i],t[i-1]);
scade(t[i],t[i-k-2]);
}
}
else if(k+1==n) t[n][max]--;
//printf("%ld\n",t[n][0]);
printf("%ld",t[n][t[n][0]]);
for(i=t[n][0]+1;i<=max;i++)
printf("%09ld",t[n][i]);
return 0;
}