Cod sursa(job #258221)

Utilizator mihaipoascaPoasca Mihai mihaipoasca Data 14 februarie 2009 21:07:09
Problema Lampa Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.74 kb
#include<fstream>
#include<string.h>
#define max(a,b) (a>b?a:b)
#define MAX 1010900
using namespace std;

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

int N,M,fa,fb;
char cuv[MAX],A[MAX],B[MAX],aux[MAX];

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*4)&&ok==0;la++){
        int lb=(M-la*fa)/fb;
        if(M==la*fa+lb*fb){
            int okk=1;

            if(N%2){
                strncpy(A,cuv,la);
                strncpy(B,cuv+la,lb);
                B[lb]=0;A[la]=0;
                if(A[0]!=cuv[la+lb]&&B[0]!=cuv[la+lb])
                    okk=0;
            }
            else{
                strncpy(A,cuv+lb,la);
                strncpy(B,cuv,lb);
                A[la]=0;B[lb]=0;
                if(B[0]!=cuv[lb+la]&&A[0]!=cuv[la+lb])
                    okk=0;
            }



            for(int i=3;i<=N&&okk;i++){
                strcpy(aux,A);
                strcpy(A,B);
                strcpy(B,aux);
                strcat(B,A);
            }
            if(strcmp(B,cuv)!=0)
                okk=0;
            if(okk){
                if(N%2){
                    strncpy(A,cuv,la);
                    strncpy(B,cuv+la,lb);
                    B[lb]=0;A[la]=0;
                }
                else{
                    strncpy(A,cuv+lb,la);
                    strncpy(B,cuv,lb);
                    A[la]=0;B[lb]=0;

                }
                ok=1;
                fout<<A<<"\n"<<B<<"\n";
            }
        }
    }

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