Pagini recente » Cod sursa (job #2786344) | Cod sursa (job #2610134) | Cod sursa (job #2757646) | Cod sursa (job #2479653) | Cod sursa (job #2324139)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("pavare2.in");
ofstream fout("pavare2.out");
int a[105][105][105],b[105][105][105],nrOrd[105],s[105];
int n,ma,mb,x;
bool stare;
char c[105];
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,k;
for(int i=1;i<=v1[0];i++)
{
if(v1[i]-t<v2[i])
{
k=10+v1[i]-t-v2[i];
t=1;
}
else
{
k=v1[i]-t-v2[i];
t=0;
}
v3[i]=k;
}
while(!v3[v3[0]])
v3[0]--;
}
int cmp(int v1[],int v2[])
{
if(v1[0]>v2[0])
return 1;
if(v1[0]<v2[0])
return -1;
for(int i=v1[0];i>=1;i--)
{
if(v1[i]>v2[i])
return 1;
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=nrOrd[0];i>=1;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<=ma&&j<=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<=mb&&j<=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;
}