Cod sursa(job #964400)

Utilizator misinoonisim necula misino Data 20 iunie 2013 21:09:33
Problema Lampa Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include<fstream>
using namespace std;
ifstream f("lampa.in");
ofstream g("lampa.out");
int n,l,i,j,a[30],b[30],v[200];
string s1,s2,c[30];
char s[3100100];
inline bool verif(int x,int y)
{
    int ps1,ps2,p,i,j;
    char ch;
    ps2=l-y+1;
    if(n%2)
    ps1=1;
    else
    ps1=1+y;
    v['a']=x;
    v['b']=y;
    p=0;
    for(i=1;i<=l;)
    {
        ch=c[n][p];
        if(ch=='a')
        {
            for(j=i;j<i+v[ch];++j)
            if(s[j]!=s[ps1+j-i])
            return 0;
        }
        else
        {
            for(j=i;j<i+v[ch];++j)
            if(s[j]!=s[ps2+j-i])
            return 0;
        }
        i+=v[ch];
        ++p;
    }
  //  s1=v['a'];
    s1.clear();
    for(i=1;i<=v['a'];++i)
    s1.push_back(s[ps1+i-1]);
  //  s2=v['b'];
    s2.clear();
    for(i=1;i<=v['b'];++i)
    s2.push_back(s[ps2+i-1]);
    return 1;
}
int main()
{
    f>>n>>l;
    f>>(s+1);
    a[1]=b[2]=1;
    c[1]="a";
    c[2]="b";
    for(i=3;i<=25;++i)
    {
        a[i]=a[i-1]+a[i-2];
        b[i]=b[i-1]+b[i-2];
        c[i]=c[i-2]+c[i-1];
    }
    for(i=1;i*a[n]<=l;++i)
    {
        if(!((l-a[n]*i)%b[n]))
        {
            j=(l-a[n]*i)/b[n];
            if(verif(i,j))
            {
                g<<s1<<'\n'<<s2<<'\n';
                return 0;
            }
        }
    }
    g<<0<<'\n';
    return 0;
}