Pagini recente » Cod sursa (job #536566) | Cod sursa (job #2516521) | Cod sursa (job #2461508) | Cod sursa (job #2321192) | Cod sursa (job #2516519)
#include <fstream>
using namespace std;
ifstream in("pavare2.in");
ofstream out("pavare2.out");
const int lim=105;
struct numar
{
int v[45];
}dp[lim][2*lim];
int alb[45];
int negru[45];
int rez[45];
inline void afis(int v[])
{
for(int i=v[0];i>=1;--i)
out<<v[i];
out<<'\n';
}
inline void cpy(int v[],int f[])
{
for(int i=v[0];i>=0;--i)
v[i]=0;
for(int i=f[0];i>=0;--i)
v[i]=f[i];
}
inline void adun(int a[],int b[],int sum[])
{
int aux,carry=0;
for(int i=1;i<=max(a[0],b[0]);++i)
{
aux=a[i]+b[i]+carry;
sum[i]=aux%10;
carry=aux/10;
}
sum[0]=max(a[0],b[0]);
if(carry!=0)
sum[0]++,sum[sum[0]]=carry;
for(int i=sum[0]+1;i<=44;++i)
sum[i]=0;
}
inline void makezero(int v[])
{
for(int i=0;i<=44;++i)
v[i]=0;
}
int main()
{
ios_base::sync_with_stdio(false);
in.tie(0),out.tie(0);
int n,a,b,k;
in>>n>>a>>b>>k;
dp[1][1].v[0]=dp[1][1].v[1]=1;
dp[1][a+1].v[0]=dp[1][a+1].v[1]=1;
for(int i=2;i<=n;++i)
{
makezero(alb);
makezero(negru);
for(int j=1;j<=a;++j)
adun(alb,dp[i-1][j].v,alb);
for(int j=a+1;j<=a+b;++j)
adun(negru,dp[i-1][j].v,negru);
for(int j=2;j<=a;++j)
cpy(dp[i][j].v,dp[i-1][j-1].v);
cpy(dp[i][1].v,negru);
for(int j=a+2;j<=a+b;++j)
cpy(dp[i][j].v,dp[i-1][j-1].v);
cpy(dp[i][a+1].v,alb);
}
for(int i=1;i<=a+b;++i)
adun(rez,dp[n][i].v,rez);
afis(rez);
if(k==1)
{
for(int i=1;i<=n;++i)
if(i%(a+1)==0)
out<<1;
else out<<0;
return 0;
}
return 0;
}