Pagini recente » Cod sursa (job #213064) | Cod sursa (job #873460) | Cod sursa (job #1992037) | Cod sursa (job #2550143) | Cod sursa (job #2307364)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("pavare2.in");
ofstream fout("pavare2.out");
int N,n,m,i,j;
bool ok;
long long a[105][105][105],b[105][105][105],c[105],k[105],l,s[105];
char aux[105];
void tipar(int n){
for(int i=1;i<=n;i++)
fout<<ok;
}
void suma(long long a[], long long b[], long long c[]){
int i,t=0;
for(i=1;i<=a[0] || i<=b[0];i++){
c[i]=a[i]+b[i]+t;
c[i]%=10;
t/=10;
}
c[0]=i-1;
if(t!=0)
c[++c[0]]=t;
}
void dif(long long a[], long long b[]){
int i;
for(i=1;i<=a[0];i++){
if(a[i]<b[i]){
a[i+1]--;
a[i]=10+a[i]-b[i];
}
else
a[i]-=b[i];
}
}
int main()
{
fin>>N>>n>>m;
fin.get();
fin.getline(aux+1,100);
for(i=1;aux[i]!=0;i++)
k[i]=aux[i];
k[0]=strlen(aux+1);
a[0][0][0]=a[0][0][1]=b[0][0][0]=b[0][0][1]=1;
for(i=1;i<=N;i++){
for(j=1;j<=n && j<=i;j++){
memcpy(a[i][j],b[i-j][0],sizeof(a[i][j]));
suma(a[i][0],a[i][j],a[i][0]);
}
for(j=1;j<=m && j<=i;j++){
memcpy(b[i][j],a[i-j][0],sizeof(b[i][j]));
suma(b[i][0],b[i][j],b[i][0]);
}
}
suma(a[N][0],b[N][0],c);
for(i=c[0];i>=1;i--)
fout<<c[i];
fout<<'\n';
ok=0;
l=N;
while(l!=0){
if(ok==0){
if(memcmp(k,a[l][0],sizeof(k))>0){
dif(k,a[l][0]);
ok=1;
}
else{
for(j=n;j>=1;j--)
if(memcmp(k,a[l][j],sizeof(k))>0)
dif(k,a[l][j]);
else{
tipar(j);
l-=j;
ok=1;
break;
}
}
}
else{
if(memcmp(k,b[l][0],sizeof(k))>0){
dif(k,b[l][0]);
ok=0;
}
else{
for(j=1;j<=m;j++)
if(memcmp(k,b[l][j],sizeof(k))>0)
dif(k,b[l][j]);
else{
tipar(j);
l-=j;
ok=0;
break;
}
}
}
}
return 0;
}