Cod sursa(job #1563559)

Utilizator serbanSlincu Serban serban Data 6 ianuarie 2016 11:26:36
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

int pi[1000000];
char s[1000100];
int mx, k, n;

int main()
{
    freopen("prefix.in", "rt", stdin);
    freopen("prefix.out", "wt", stdout);

    bool enter, ok;
    int pr, dif;
    int T; scanf("%d\n", &T);
    for(int o = 1; o <= T; o ++) {
        gets(s + 1); n = strlen(s + 1);
        mx = 0; k = 0;
        for(int i = 2; i <= n; i ++) {
            while(k && s[i] != s[k + 1]) k = pi[k];
            if(s[i] == s[k + 1]) k ++;
            pi[i] = k;
        }

        for(int i = n; i >= 1; i --) {
            if(pi[i] && (i % (i - pi[i])) == 0) {
                mx = i; break;
            }
        }
        cout << mx << "\n";
    }
    return 0;
}