Cod sursa(job #941352)

Utilizator dutzulBodnariuc Dan Alexandru dutzul Data 18 aprilie 2013 16:29:18
Problema Lampa Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.12 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("lampa.in");
ofstream g("lampa.out");

#define LE 306666
#define LE2 106666

int ap[66][3],li[66];
int i,l1,l2,rest,n,m;
string s;
char a[LE],b[LE];
int st1,st2;
int stare,k;
bool good;
string next[20];


int main() {
    f>>n>>m;

    ap[1][1]=1;
    ap[2][2]=1;
    li[1]=1;
    li[2]=2; f>>s;

    if (n==25)
    {
        g<<-1<<'\n';
        return 0;
    }


    next[1]="0";
    next[2]="1";

    for(i=3; i<=n; ++i) {
        ap[i][1]+=(ap[i-1][1]+ap[i-2][1]);
        ap[i][2]+=(ap[i-1][2]+ap[i-2][2]);
        li[i]=li[i-2];
        next[i]+=next[i-2];
        next[i]+=next[i-1];
    }



    for(l1=1; l1*ap[n][1]<m; ++l1) {

        rest=m-ap[n][1]*l1;
        k=0;
        if(rest%ap[n][2]) continue;
        l2=rest/ap[n][2];
        bool okz=false;



        if (li[n]==1) {
            stare=0;

            for(i=0; i<l1; ++i)
                a[i]=s[i];

            for(i=l1; i<=l1+l2-1; ++i)
                b[i-l1]=s[i];
        } else {
            stare=1;
            for(i=0; i<l2; ++i)
                b[i]=s[i];
            for(i=l2; i<=l1+l2-1; ++i)
                a[i-l2]=s[i];
        }
        st1=st2=0;

        for(i=0; i<m; ++i) {
            if ((stare==0&&a[st1]!=s[i])||(stare==1&&b[st2]!=s[i])) {
                okz=true;
                break;
            }
            if (stare==0)
                ++st1;
            else ++st2;

            if (st1==l1)  {
                st1=0;
                stare=(next[n][k+1]=='0'?0:1);
                ++k;
            }

            if (st2==l2)  {
                st2=0;
                stare=(next[n][k+1]=='0'?0:1);
                ++k;
            }
        }

        if (okz==false) {
            good=true;
            break;
        }
    }

    if (good==false)
        g<<-1;
    else {

        for(i=0; i<l1; ++i)
            g<<a[i];
        g<<'\n';

        for(i=l1; i<=l1+l2-1; ++i)
            g<<b[i-l1];
        g<<'\n';
    }



    f.close();
    g.close();
    return 0;
}