Cod sursa(job #2482155)

Utilizator hunting_dogIrimia Alex hunting_dog Data 27 octombrie 2019 20:41:28
Problema Potrivirea sirurilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>
#include <string>
#include <vector>

using namespace std;

ifstream f("prefix.in");
ofstream g("prefix.out");

vector <int> make_lps(string &s)
{
    vector <int> lps;
    lps.push_back(0);
    int i=0,j=1,n=s.size();
    while(j<n)
    {
        if(s[i]==s[j])
            ++i,lps.push_back(i),++j;
        else
            if(i!=0)
                i=lps[i-1];
            else
                lps.push_back(0),++j;
    }
    return lps;
}

int main()
{
    int n;
    f>>n;
    while(n--)
    {
        string s;
        f>>s;
        vector <int> lps=make_lps(s);
        int m=s.size();
        while(m>0 && (!lps[m-1] || m%(m-lps[m-1])))
            {
                --m;
            }
        g<<m<<'\n';
    }

    return 0;
}