Pagini recente » Cod sursa (job #2036159) | Rating Stancu Florin (StancuFlorin) | Cod sursa (job #926945) | Cod sursa (job #14175) | Cod sursa (job #1654464)
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
int n,l,a,b,nr,np,i,j,ii,ok,d[110][2][110][50],z[3],v[50],x[50];
char s[50];
FILE *f,*g;
void ad(int a[],int b[]) {
int t = 0;
if(a[0] < b[0]) {
for(int i = a[0] + 1; i <= b[0]; ++i)
a[i] = 0;
a[0] = b[0];
}
else{
for (int i = b[0] + 1; i <= a[0]; ++i)
b[i] = 0;
}
for (int i = 1; i <= a[0]; ++i) {
a[i] = a[i] + b[i] + t;
t = a[i] / 10;
a[i] = a[i] % 10;
}
if (t)
a[ ++a[0] ] = t;
}
int minim(int a,int b){
if(a<b)
return a;
return b;
}
void scad(int a[],int b[]){
int t=0;
for(int i=1;i<=a[0];i++){
a[i] = a[i] - b[i] - t;
if( a[i] < 0 ){
t = 1;
a[i] += 10;
}
else
t = 0;
}
while( a[0] && a[ a[0] ] == 0 )
a[0] --;
}
int cmp(int a[],int b[]){
if( a[0] != b[0] )
return a[0] > b[0];
for(int i=a[0];i>=1;i--){
if( a[i] != b[i] )
return a[i] > b[i];
}
return 0;
}
int main(){
f=fopen("pavare2.in","r");
g=fopen("pavare2.out","w");
fscanf(f,"%d%d%d\n%s",&n,&z[0],&z[1],s+1);
l=strlen(s+1);
v[0] = l;
for( i = v[0],j=1; i>0; i--,j++ ){
v[j] = s[i]-'0';
}
d[1][0][1][0] = d[1][0][1][1] = d[1][1][1][0] = d[1][1][1][1] = 1;
for(i=2;i<=n;i++){
for(j=0;j<2;j++){
x[0] = 1;
x[1] = 0;
for(ii=1;ii<=z[ ( j + 1 ) % 2 ];ii++){
ad( x, d[ i - 1 ][ ( j + 1 ) % 2 ][ii] );
}
ad( d[i][j][1], x );
for(ii=2;ii<=z[j];ii++){
ad( d[i][j][ii], d[ i - 1 ][j][ ii - 1 ] );
}
}
}
x[0] = 1;
x[1] = 0;
for(i=0;i<2;i++){
for(j=1;j<=z[i];j++){
ad( x , d[n][i][j] );
}
}
for(i=x[0];i>=1;i--){
fprintf(g,"%d",x[i]);
}
fprintf(g,"\n");
np = -1;
nr = 0;
i = n;
while(i){
a = z[0];
if( np == 0 )
a -= nr;
a = minim(i, a);
ok = 0;
if( np != 0 ){
for(j=a;j>=1;j--){
if( cmp( v , d[i][0][j] ) == 1 )
scad( v , d[i][0][j] );
else{
i -= j;
for(ii=1;ii<=j;ii++){
fprintf(g,"0");
}
if(np == 0)
nr += j;
else
nr = j;
np = 0;
ok = 1;
break;
}
}
}
if( !ok ){
a = z[1];
if( np == 1 )
a -= nr;
a = minim(i, a);
ok = 0;
if( np != 1 ){
for(j=1;j<=a;j++){
if( cmp( v , d[i][1][j] ) == 1 )
scad( v , d[i][1][j] );
else{
i -= j;
for(ii=1;ii<=j;ii++){
fprintf(g,"1");
}
if(np == 1)
nr += j;
else
nr = j;
np = 1;
ok = 1;
break;
}
}
}
}
}
fclose(f);
fclose(g);
return 0;
}