Cod sursa(job #2089736)
Utilizator | Data | 17 decembrie 2017 00:30:48 | |
---|---|---|---|
Problema | Lampa | Scor | 60 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 3.63 kb |
#include<bits/stdc++.h>
using namespace std;
ifstream f("lampa.in");
ofstream g("lampa.out");
int alc, len;
char c[3027198];
char c1[100000],c2[100000],c3[100000];
char csol[100002],csolb[100002];
int nra, nrb;
int L;
void init()
{
f>>alc>>len;
f>>c;
c1[0]='a';
c2[0]='b';
for(int i=3;i<=alc;++i)
{
memset(c3,NULL,strlen(c3)+1);
strcat(c3,c1);
strcat(c3,c2);
strcpy(c1,c2);
strcpy(c2,c3);
}
L=strlen(c3);
for(int i=0;i<L;++i)
if(c3[i]=='a')
++nra;
else
++nrb;
}
int main()
{
init();
int l=0;
while(1)
{
++l;
if(c3[0]=='b')
{
csolb[l-1]=c[l-1];
int dif=len-nrb*l;
if(dif<nra){
g<<0;
return 0;
}
if(dif%nra>0)
continue;
int sta=-1;
int La=dif/nra;
int ct=0;
bool Hmmm=1;
for(int i=0;i<L && Hmmm;++i)
{
if(c3[i]=='b'){
for(int j=0;j<l;++j)
if(c[ct+j]!=c[j])
{
Hmmm=0;
break;
}
ct+=l;
}
else
{
if(sta==-1){
sta=ct;
memset(csol,NULL,strlen(csol)+1);
for(int j=0;j<La;++j)
csol[j]=c[ct+j];
}
else
for(int j=0;j<La;++j)
if(c[ct+j]!=csol[j])
{
Hmmm=0;
break;
}
ct+=La;
}
}
if(Hmmm==1)
break;
}
else
{
csol[l-1]=c[l-1];
int dif=len-nra*l;
if(dif%nrb==0)
{
int sta=-1;
int La=dif/nrb;
int ct=0;
bool Hmmm=1;
for(int i=0;i<L && Hmmm;++i)
{
if(c3[i]=='a')
{
for(int j=0;j<l;++j)
if(c[ct+j]!=csol[j])
{
Hmmm=0;
break;
}
ct+=l;
}
else
{
if(sta==-1){
sta=ct;
memset(csolb,NULL,strlen(csolb)+1);
for(int j=0;j<La;++j)
csolb[j]=c[ct+j];
csolb[La]=NULL;
}
else
for(int j=0;j<La;++j)
if(c[ct+j]!=csolb[j])
{
Hmmm=0;
break;
}
ct+=La;
}
}
if(Hmmm==1)
break;
}
else
if(dif<nrb){
g<<0;
return 0;
}
}
}
g<<csol<<'\n'<<csolb<<'\n';
return 0;
}