Pagini recente » Cod sursa (job #141509) | Cod sursa (job #433976) | Cod sursa (job #1312529) | Cod sursa (job #987766) | Cod sursa (job #157563)
Cod sursa(job #157563)
#include <stdio.h>
#include <string.h>
int n,m,fib[19],x[3],ok=0;
char s[3027198];
void genfib(int n){
int i;
fib[0]=1;
fib[1]=1;
for(i=2;i<=n;i++)
fib[i]=fib[i-1]+fib[i-2];
}
void verifica(char a[],char b[]){
int i;
char aux1[100],aux2[100],aux[100];
strcpy(aux1,a);
strcpy(aux2,b);
for(i=3;i<=n;i++){
strcpy(aux,strcat(aux1,aux2));
strcpy(aux1,aux2);
strcpy(aux2,aux);
}
if(strcmp(aux,s)==0){
printf("%s\n%s",a,b);
ok=1;
}
}
void formsol(){
char a[100],b[100],k1=0,k2=0;
int i,j;
if(n%2!=0){
for(i=0;i<x[1];i++)
a[k1++]=s[i];
a[k1]=0;
for(j=i;j<i+x[2];j++)
b[k2++]=s[j];
b[k2]=0;
}
else{
for(i=0;i<x[2];i++)
b[k2++]=s[i];
b[k2]=0;
for(j=i;j<i+x[1];j++)
a[k1++]=s[j];
a[k1]=0;
}
verifica(a,b);
}
void solec(int k){
int i;
for(i=1;i<=(m-x[k-1]*fib[n-k-1])/fib[n-4+k];i++){
x[k]=i;
if(k==2){
if(x[1]*fib[n-3]+x[2]*fib[n-2]==m)
formsol();
}
else
solec(k+1);
}
}
int main(){
freopen("lampa.in","r",stdin);
freopen("lampa.out","w",stdout);
scanf("%d%d\n",&n,&m);
gets(s);
genfib(n);
x[0]=1;
solec(1);
if(ok==0)
printf("0\n");
fclose(stdout);
return 0;
}