Cod sursa(job #258200)

Utilizator mihaipoascaPoasca Mihai mihaipoasca Data 14 februarie 2009 20:44:03
Problema Lampa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.08 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[3027197+2],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&&ok==0;la++){
        int lb=(M-la*fa)/fb;
        if(M==la*fa+lb*fb){
          //  char A[la],B[lb];
            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;*/
                strncpy(A,cuv,la);
                strncpy(B,cuv+la,lb);
                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;*/
                strncpy(A,cuv+lb,la);
                strncpy(B,cuv,lb);
                A[la]=0;B[lb]=0;

            }


            int okk;
            for(int i=3;i<=N;i++){
            //    char aux[max(strlen(A),strlen(B))];
                strcpy(aux,A);
                strcpy(A,B);
                strcpy(B,aux);
                strcat(B,A);
            }
            if(strcmp(B,cuv)==0)
                okk=1;
            else
                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;
}