Cod sursa(job #2166317)

Utilizator catalinlupCatalin Lupau catalinlup Data 13 martie 2018 16:35:14
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <bits/stdc++.h>
#define INFILE "prefix.in"
#define OUTFILE "prefix.out"
using namespace std;
ifstream in(INFILE);
ofstream out(OUTFILE);
void PrefixFunction(string& S,vector<int>&p) {
    p.resize(S.size());
    int j = 0;
    for (int i = 1; i < (int)S.size(); i++) {
        while (j > 0 && S[j] != S[i])
            j = p[j-1];
        if (S[j] == S[i])
            j++;
        p[i] = j;
    }

}
int main(){
    int t;
    in>>t;
    for(int i=1;i<=t;i++){
        string s;
        in>>s;
        vector<int> p;
        PrefixFunction(s,p);
        bool gasit=false;
        for(int j=s.size();j>=1;j--){
            if(p[j-1]>0&&j%(j-p[j-1])==0){
                out<<j<<"\n";
                gasit=true;
                break;
            }
        }
        if(!gasit)
            out<<0<<"\n";
    }
    return 0;
}