Pagini recente » Cod sursa (job #2163897) | Cod sursa (job #2428256) | Cod sursa (job #1103083) | Cod sursa (job #990997) | Cod sursa (job #481727)
Cod sursa(job #481727)
#include <stdio.h>
#include <string.h>
#define Nmax 102
#define Cmax 102
int N,A,B;
char s[Cmax];
int K[Cmax],rez[Cmax];
int a[Nmax][Nmax][2][Cmax];
void adun(int a[],int b[]){
int i,t=0;
for(i=1; i<=a[0] || i<=b[0] || t; ++i,t/=10)
a[i]=(t+=a[i]+b[i])%10;
a[0]=i-1;
}
void scad(int a[],int b[]){
int i,t=0;
for(i=1; i<=a[0]; ++i){
if( a[i]-b[i]-t >=0 ) a[i]=a[i]-b[i]-t, t=0;
else a[i]=a[i]-b[i]-t+10, t=1;
}
while( !a[a[0]] ) --a[0];
}
inline int mai_mare(int a[],int b[]){
int i;
if( a[0] > b[0] ) return 1;
if( a[0] < b[0] ) return 0;
for(i=a[0];i>=1;--i){
if( a[i] > b[i] ) return 1;
if( a[i] < b[i] ) return 0;
}
return 1;
}
void write_sol(){
int i,j,now=0;
do{
if( now == 0 )
for(i=A;i>=0;--i){
if( mai_mare(a[N][i][0],K) ){
for(j=1;j<=i;++j) printf("%d",0);
N-=i;
now=1;
break;
}
else scad(K,a[N][i][0]);
}
else
for(i=1;i<=B;++i){
if( mai_mare(a[N][i][1],K) ){
for(j=1;j<=i;++j) printf("%d",1);
N-=i;
now=0;
break;
}
else scad(K,a[N][i][1]);
}
} while( N );
}
int main(){
int i,j,aux;
freopen("pavare2.in","r",stdin);
freopen("pavare2.out","w",stdout);
scanf("%d%d%d\n",&N,&A,&B);
scanf("%s",s);
for(i=0; s[i]>='0' && s[i]<='9'; ++i)
K[i+1]=s[i]-'0';
K[0]=i;
for(i=1;i<=K[0]/2;++i) aux=K[i],K[i]=K[K[0]-i+1],K[K[0]-i+1]=aux;
a[1][0][0][0]=a[1][0][0][1]=1;
a[1][1][0][0]=a[1][1][0][1]=1;
a[1][0][1][0]=a[1][0][1][1]=1;
a[1][1][1][0]=a[1][1][1][1]=1;
for(i=2;i<=N;++i){
for(j=1;j<=A && j<=i;++j){
memcpy(a[i][j][0],a[i-1][j-1][0],sizeof(a[i-1][j-1][0]));
adun(a[i][0][1],a[i][j][0]);
}
for(j=1;j<=B && j<=i;++j){
memcpy(a[i][j][1],a[i-1][j-1][1],sizeof(a[i-1][j-1][1]));
adun(a[i][0][0],a[i][j][1]);
}
}
memcpy(rez,a[N][0][0],sizeof(a[N][0][0]));
adun(rez,a[N][0][1]);
for(i=rez[0];i>=1;--i)
printf("%d",rez[i]);
printf("\n");
write_sol();
printf("\n");
fclose(stdin); fclose(stdout);
return 0;
}