Pagini recente » Cod sursa (job #1865172) | Cod sursa (job #1516277) | Cod sursa (job #1810587) | Cod sursa (job #216563) | Cod sursa (job #777286)
Cod sursa(job #777286)
#include<fstream>
#include<string.h>
using namespace std;
ifstream f("lampa.in");
ofstream g("lampa.out");
int n,m,nc,i,j,la,lb,nrc,nrcab,gata;
int fib[20];
int l[18];
char cuv[3027200];
char a[1002720],b[1002720];
char config[3][1600];
int construieste()
{nrc=la+lb;
for(j=2; j<l[n]; j++)
{nrcab=0;
if(config[2][j]=='A')
while(nrcab<la)
{if(a[nrcab]!=cuv[nrc])
return 0;
nrcab++;
nrc++;}
if(config[2][j]=='B')
while(nrcab<lb)
{if(b[nrcab]!=cuv[nrc])
return 0;
nrcab++;
nrc++;}
}
return 1;
}
void afiseaza()
{
for(j=0; j<la; j++)
g<<a[j];
g<<endl;
for(j=0; j<lb; j++)
g<<b[j];
}
void sterge()
{for(j=0; j<la; j++)
a[j]=0;
for(j=0; j<lb; j++)
b[j]=0;}
void verifica(int lxa, int lxb)
{
if(n%2==1)
{for(nc=0; nc<lxa; nc++)
a[nc]=cuv[nc];
for(nc=lxa; nc<lxa+lxb; nc++)
b[nc-lxa]=cuv[nc];
if(construieste())
{gata=1;
afiseaza();}
else
{sterge();}
}
if(n%2==0)
{for(nc=0; nc<lxb; nc++)
b[nc]=cuv[nc];
for(nc=lxb; nc<lxa+lxb; nc++)
a[nc-lxb]=cuv[nc];
if(construieste())
{gata=1;
afiseaza();}}
else
{sterge();}
}
int main()
{f>>n>>m;
f.getline(cuv,3027200);
f.getline(cuv,3027200);
fib[1]=1;
fib[2]=1;
for(i=2;i<=n; i++)
fib[i]=fib[i-1]+fib[i-2];
strcpy(config[0],"A");
strcpy(config[1],"B");
l[1]=1;
l[2]=1;
for(i=3; i<=n; i++)
{strcpy(config[2],config[0]);
strcat(config[2],config[1]);
strcpy(config[0],config[1]);
strcpy(config[1],config[2]);
l[i]=l[i-2]+l[i-1];}
for(la=1; la<=(m/fib[n-2]+1); la++)
{lb=(m-la*fib[n-2])/fib[n-1];
if(la*fib[n-2]+lb*fib[n-1]==m)
verifica(la,lb);
if(gata==1)
break;
}
f.close();
g.close();
return 0;}