Cod sursa(job #2089736)

Utilizator stefdascalescuStefan Dascalescu stefdascalescu 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;
}