Cod sursa(job #2089734)

Utilizator stefdascalescuStefan Dascalescu stefdascalescu Data 17 decembrie 2017 00:28:10
Problema Lampa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.44 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)
                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=La;j>=0;--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){
                g<<0;
                return 0;
            }
            if(dif%nrb)
                continue;
            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=La;j>=0;--j)
                            if(c[ct+j]!=csolb[j])
                            {
                                Hmmm=0;
                                break;
                            }
                    ct+=La;
                }
            }
            if(Hmmm==1)
                break;
        }
    }
    g<<csol<<'\n'<<csolb;
    return 0;
}