Cod sursa(job #2066521)

Utilizator alex2kamebossPuscasu Alexandru alex2kameboss Data 15 noiembrie 2017 08:41:33
Problema Prefix Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <iostream>
#include <cstdio>
#include <string>
#include <vector>

using namespace std;
string text;
vector <int> lp;
int l;
int main()
{
    freopen("prefix.in","r",stdin);
    freopen("prefix.out","w",stdout);
    int n;
    scanf("%d\n", &n);
    while(n--)
    {
        lp.push_back(0);
        getline(cin,text);
        l=text.length();
        int j=0;
        for(int i=1;i<l;i++)
        {
            if(text[j]==text[i])
                lp.push_back(++j);
            else
            {
                j--;
                while(j>=0)
                {
                    j=lp[j];
                    if(text[j]==text[i])
                    {
                        lp.push_back(++j);
                        break;
                    }
                    else
                        j--;
                }
                if(j<0)
                {
                    j=0;
                    lp.push_back(0);
                }
            }
        }
        int m=0;
        for(int i=0;i<l;i++)
        {
            if(lp[i])
            {
            int lpl=i+1-lp[i];
            if((i+1)%lpl==0)
                m=i+1;
            }
        }
        cout<<m<<"\n";
        lp.clear();
    }
    return 0;
}