Cod sursa(job #258133)

Utilizator mihaipoascaPoasca Mihai mihaipoasca Data 14 februarie 2009 19:32:44
Problema Lampa Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include<fstream>
#include<string.h>
using namespace std;

ifstream fin("lampa.in");
ofstream fout("lampa.out");

int N,M,fa,fb;
char cuv[400000];

int valid(char a[],char b[]){
    char A[400000],B[400000];
    strcpy(A,a);
    strcpy(B,b);
    for(int i=3;i<=N;i++){
        char aux[400000];
        strcpy(aux,A);
        strcpy(A,B);
        strcpy(B,aux);
        strcat(B,A);
    }
    if(strcmp(B,cuv)==0)
        return 1;
    return 0;

}

int main(){
    fin>>N>>M>>cuv;
    fa=fb=1;
    for(int i=1;i<N-2;i++){
        int aux;
        aux=fa;
        fa=fb;
        fb+=aux;
    }

    int ok=0;
    for(int la=1;la<=(M-fb)/fa&&ok==0;la++){
        int lb=(M-la*fa)/fb;
        if(M==la*fa+lb*fb){
            char A[400000],B[400000];
            if(N%2){
                for(int i=0;i<la;i++)
                    A[i]=cuv[i];
                for(int i=0;i<lb;i++)
                    B[i]=cuv[i+la];
                B[lb]=0;A[la]=0;
            }
            else{
                for(int i=0;i<lb;i++)
                    B[i]=cuv[i];
                for(int i=0;i<la;i++)
                    A[i]=cuv[i+lb];
                A[la]=0;B[lb]=0;
            }


            if(valid(A,B)){
                ok=1;
                fout<<A<<"\n"<<B<<"\n";
            }
        }
    }

    if(ok==0)
        fout<<0<<"\n";
    fin.close();
    fout.close();
    return 0;
}