Cod sursa(job #564209)

Utilizator eudanipEugenie Daniel Posdarascu eudanip Data 26 martie 2011 21:53:20
Problema Lampa Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include<stdio.h>

int n,m,f1[53],f2[53];
char s[3100006];
char a[50006],b[50005];

int egal(int st,int dr,int lv,int l1,int l2)
{
    if(lv==1)
    {
        for(int i=1;i<=l1;i++)
            if(a[i]!=s[st+i-1])
                return 0;
        return 1;
    }
    if(lv==2)
    {
        for(int i=1;i<=l2;i++)
            if(b[i]!=s[st+i-1])
                return 0;
        return 1;
    }
    int L=f1[lv-2]*l1+f2[lv-2]*l2;
    if(egal(st,st+L-1,lv-2,l1,l2)
    && egal(st+L,dr,lv-1,l1,l2))
        return 1;
    return 0;
}

int merge(int l1,int l2)
{
    int i;
    for(i=0;i<l1;i++)
        a[i+1]=s[i];
    for(i=l1;i<l1+l2;i++)
        b[i-l1+1]=s[i];
    if(!egal(0,m,n,l1,l2))
        return 0;
    for(i=1;i<=l1;i++)
        printf("%c",a[i]);
    printf("\n");
    for(i=1;i<=l2;i++)
        printf("%c",b[i]);
    printf("\n");
    return 1;
}

int main ()
{
    int i,j,L;
    
    freopen("lampa.in","r",stdin);
    freopen("lampa.out","w",stdout);
    scanf("%d%d\n",&n,&m);
    fgets(s,sizeof(s),stdin);
    f1[1]=1;f1[2]=0;
    for(i=3;i<=n;i++)
        f1[i]=f1[i-2]+f1[i-1];
    f2[1]=0;f2[2]=1;
    for(i=3;i<=n;i++)
        f2[i]=f2[i-2]+f2[i-1];
    for(i=1;i<=m;i++)
    {
        L=m-f1[n]*i;
        if(L<=0)
            break;
        if(L%f2[n])
            continue;
        j=L/f2[n];
        if(merge(i,j))
            return 0;
    }
    printf("0\n");
    return 0;
}