Cod sursa(job #852804)

Utilizator dicu_dariaDaria Dicu dicu_daria Data 11 ianuarie 2013 19:21:25
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include <fstream>
#include <cstring>
using namespace std;
int t, i, n, k, pi[1000010];
string s;
void prefix()
{
    k = 0;
    for(i = 2; i <= n; i++)
    {
        while(k and s[i] != s[k+1]) k = pi[k];
        if(s[i] == s[k+1]) k++;
        pi[i] = k;
    }
}
int main()
{
    ifstream fi("prefix.in");
    ofstream fo("prefix.out");
    fi >> t;
    while(t--)
    {
        fi >> s;
        n = s.length();
        s = " " + s;
        prefix();
        for(i = n; i > 0; i--)
        if((pi[i] != 0) and (i%(i-pi[i]) == 0))
        {
            fo << i << "\n";
            break;
        }
        if(i == 0) fo << "0\n";
    }
    return 0;
}