Cod sursa(job #2107409)

Utilizator sergiudnyTritean Sergiu sergiudny Data 17 ianuarie 2018 09:51:22
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <bits/stdc++.h>
#define pb push_back
using namespace std;
ifstream fin("string.in");
ofstream fout("string.out");

int n,logN;
string v;

int getLog(int x){
    for(int i=30;i>=0;--i) if((1<<i)&x)
        return i;
}

int form(int l){
    int x = 0;
    for(int i=0;i<l;++i){
        x<<=1;
        x+=int(v[i]-'a');
    }
    return x;
}

string transf(int x, int l){
    string ans="";
    for(int i=l-1;i>=0;--i)
        ans.pb( char( ((1<<i)&x)!=0 )+'a');
    return ans;
}

int getAns(int l){
    int test = form(l), ans=0;
    cout<<'\n'<<'\n'<<l<<'\n';
    for(int i=0;i<=n-l && ans<=(1<<l)-1;++i){
        cout<<i<<'\n';
        test<<=1;
        test+=int(v[i+l-1]-'a');
        if(test>=(1<<l)) test-=(1<<l);
        cout<<transf(test,l)<<" "<<transf(ans,l)<<'\n';
        if(test==ans) ans++, i=-1;
    }
    return ans==(1<<l)?-1:ans;
}

int main()
{
    fin>>n>>v;
    int logN=getLog(n)+1;
    for(int i=1;i<=logN;++i){
        int ans = getAns(i);
        if(ans!=-1){
            fout<<i<<'\n'<<transf(ans, i)<<'\n';
            //return 0;
        }
    }
    return 0;
}