Pagini recente » Cod sursa (job #2340965) | Cod sursa (job #1724377) | Cod sursa (job #2709583) | Cod sursa (job #440912) | Cod sursa (job #2323513)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("pavare2.in");
ofstream fout("pavare2.out");
int a[101][101][101],b[101][101][101],x,nrOrd[101],s[101];
int stare,n,ma,mb,k;
char c[101];
void suma(int v1[],int v2[],int v3[])
{
int t=0;
int nrcif=max(v1[0],v2[0]);
v3[0]=nrcif;
for(int i=1;i<=nrcif;i++)
{
t+=v1[i]+v2[i];
v3[i]=t%10;
t/=10;
}
if(t)
{
v3[0]++;
v3[v3[0]]=t;
}
}
void dif(int v1[],int v2[],int v3[])
{
int t=0;
for(int i=1;i<=v1[0];i++)
{
t+=v1[i]-v2[i];
v3[i]=t%10;
t/=10;
}
while(!v3[0])
v3[0]--;
}
int cmp(int v1[],int v2[])
{
for(int i=0;i<=max(v1[0],v2[0]);i++)
{
if(v1[i]>v2[i])
return 1;
else if(v1[i]<v2[i])
return -1;
}
return 0;
}
int main()
{
fin>>n>>ma>>mb>>c+1;
nrOrd[0]=strlen(c+1);
for(int i=1;i<=nrOrd[0];i++)
nrOrd[i]=c[i]-'0';
a[0][0][1]=a[0][0][0]=b[0][0][1]=b[0][0][0]=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=min(ma,i);j++)
{
for(int k=0;k<=b[i-j][0][0];k++)
a[i][j][k]=b[i-j][0][k];
suma(a[i][0],a[i][j],a[i][0]);
}
for(int j=1;j<=min(mb,i);j++)
{
for(int k=0;k<=a[i-j][0][0];k++)
b[i][j][k]=a[i-j][0][k];
suma(b[i][0],b[i][j],b[i][0]);
}
}
suma(a[n][0],b[n][0],s);
for(int i=s[0];i>=1;i--)
fout<<s[i];
fout<<'\n';
stare=0;
x=n;
while(x)
{
if(stare==0)
{
if(cmp(nrOrd,a[x][0])==1)
dif(nrOrd,a[x][0],nrOrd);
else
{
int j;
for(j=ma;cmp(nrOrd,a[x][j])==1&&j>=1;j--)
dif(nrOrd,a[x][j],nrOrd);
if(j>=1)
{
for(int l=1;l<=j;l++)
fout<<0;
x-=j;
}
}
}
else
{
if(cmp(nrOrd,b[x][0])==1)
dif(nrOrd,b[x][0],nrOrd);
else
{
int j;
for(j=1;cmp(nrOrd,b[x][j])==1&&j<=mb;j++)
dif(nrOrd,b[x][j],nrOrd);
if(j>=1)
{
for(int l=1;l<=j;l++)
fout<<1;
x-=j;
}
}
}
stare=!stare;
}
return 0;
}