Pagini recente » Cod sursa (job #2128590) | Cod sursa (job #1166297) | Cod sursa (job #1721661) | Cod sursa (job #1891979) | Cod sursa (job #2315639)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("pavare2.in");
ofstream g("pavare2.out");
int a[101][101][101],b[101][101][101],v[101];
int n,A,B,i,j,l,x,ok;
char S[102];
void dif(int a[],int b[]){
int i=0,t=0,d;
for(i=b[0]+1;i<=a[0];i++)
b[i]=0;
for(i=1;i<=a[0]||i<=b[0];i++){
d=a[i]-b[i]+t;
if(d<0){
t=-1;
d=10+d;
}
else
t=0;
a[i]=d;
}
while(!a[a[0]])
a[0]--;
}
void suma(int a[],int b[],int c[]){
int i=0,r=0;
for(i=1;i<=a[0]||i<=b[0];i++){
c[i]=a[i]+b[i]+r;
r=c[i]/10;
c[i]=c[i]%10;
}
c[0]=i-1;
if(r!=0){
c[0]=i;
c[i]=r;
}
}
int comp(int a[],int b[]){
int i=0;
if(a[0]>b[0])
return 1;
else if(a[0]<b[0])
return -1;
for(i=a[0];i>=1;i--)
if(a[i]>b[i])
return 1;
else if(a[i]<b[i])
return -1;
return 0;
}
int main()
{ f>>n>>A>>B;
a[0][0][1]=a[0][0][0]=1;
b[0][0][1]=b[0][0][0]=1;
for(i=1;i<=n;i++){
for(j=1;j<=A&&j<=i;j++){
a[i][j][0]=b[i-j][0][0];
for(l=1;l<=b[i-j][0][0];l++)
a[i][j][l]=b[i-j][0][l];
suma(a[i][0],a[i][j],a[i][0]);
}
for(j=1;j<=B&&j<=i;j++){
b[i][j][0]=a[i-j][0][0];
for(l=1;l<=b[i-j][0][0];l++)
b[i][j][l]=a[i-j][0][l];
suma(b[i][0],b[i][j],b[i][0]);
}
}
suma(a[n][0],b[n][0],v);
for(i=v[0];i>=1;i--)
g<<v[i];
g<<'\n';
f>>S+1;
memset(v,0,sizeof(v));
v[0]=strlen(S+1);
for(i=1;i<=v[0];i++)
v[i]=S[i]-'0';
x=n;ok=0;
while(x!=0){
if(ok==0){
if(comp(v,a[x][0])==1){
//k-=a[x][0];
dif(v,a[x][0]);
ok=1;
}
else{
j=x;
while(comp(a[x][j],v)==-1&&j>1){
//k-=a[x][j];
dif(v,a[x][j]);
j--;
}
ok=1;
x=x-j;
for(l=1;l<=j;l++)
g<<0;
}
}
else{
if(comp(b[x][0],v)==-1){
//k-=b[x][0];
dif(v,b[x][0]);
ok=0;
}
else{
j=1;
while(comp(b[x][j],v)==-1&&j<n){
//k-=b[x][j];
dif(v,b[x][j]);
j++;
}
ok=0;
x=x-j;
for(l=1;l<=j;l++)
g<<1;
}
}
}
return 0;
}