Cod sursa(job #179534)

Utilizator moga_florianFlorian MOGA moga_florian Data 16 aprilie 2008 00:32:00
Problema Lampa Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.17 kb
#include<fstream>
#include<string.h>

using namespace std;

char s[3027200];
char ant[1600], crt[1600], aux[1600];
char A[1600], B[1600];

int main(){

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

    int N,M;
    fin>>N>>M>>s;

    ant[0] = 'a';
    crt[0] = 'b';
    ant[1] = crt[1] = 0;

    for(int i=3;i<=N;i++){
        strcpy(aux,ant);
        strcat(aux,crt);

        strcpy(ant,crt);
        strcpy(crt,aux);
    }

    int catea=0, cateb=0;
    for(int i=0;crt[i];i++)
        if(crt[i] == 'a')
            catea++;
        else
            cateb++;

    int k;
    for(k=1;s[k];k++){
        if(k*catea < M && (M-catea*k) % cateb == 0 ){
            int q = (M-catea*k) / cateb;
            int cnt = 0;

            if(crt[0] == 'a'){
                for(int p=0;p<k;p++)
                    A[p] = s[p];
                A[k] = 0;
                for(int p=0;p<q;p++)
                    B[p] = s[k+p];
                B[q] = 0;
            }
            else{
                for(int p=0;p<q;p++)
                    B[p] = s[p];
                B[q] = 0;
                for(int p=0;p<k;p++)
                    A[p] = s[q+p];
                A[k] = 0;
            }

            int i;
            for(i=0;crt[i];i++){

                int flag = 1;

                if(crt[i] == 'a')
                    for(int tz=0;tz<k;tz++)
                        if(s[cnt+tz] != A[tz]){
                            flag = 0;
                            break;
                        }

                if(crt[i] == 'b')
                    for(int tz=0;tz<q;tz++)
                        if(s[cnt+tz] != B[tz]){
                            flag = 0;
                            break;
                        }

                if(flag == 0)
                    break;

                if(crt[i] == 'a')
                    cnt += k;
                else
                    cnt += q;

            }

            if(crt[i] == 0)
                break;

        }

    }

    if(s[k])
        fout<<A<<"\n"<<B<<"\n";
    else
        fout<<"0\n";

    fin.close();
    fout.close();
    return 0;
}