Cod sursa(job #856906)

Utilizator SteveStefan Eniceicu Steve Data 17 ianuarie 2013 07:54:56
Problema Prefix Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <cmath>
#include <iomanip>
#include <string>
#include <cstring>
#include <deque>
#include <stack>
#include <bitset>
#include <list>
#define pb push_back
#define pf push_front
#define pob pop_back
#define pof pop_front
#define mp(a,b) make_pair (a, b)
#define ll long long
#define max(a, b) (a > b ? a : b)
#define min(a, b) (a < b ? a : b)

using namespace std;

char s[1000011];
int N;
int Pi[1000011];

void Precompute ()
{
    for (int i = 2, p = 0; i <= N; i++)
    {
        while (p > 0 && s[p + 1] != s[i]) p = Pi[p];
        if (s[i] == s[p + 1]) p++;
        Pi[i] = p;
    }
}

int Business ()
{
    int ans = 0;
    for (int i = 1; i <= N; i++)
        if (Pi[i] && !(i % (i - Pi[i]))) ans = i;
    return ans;
}

int main ()
{
    int T;
    ifstream fin ("prefix.in");
    ofstream fout ("prefix.out");
    fin >> T;
    while (T--)
    {
        fin >> (s + 1);
        N = strlen (s + 1);
        Precompute ();
        fout << Business () << "\n";
    }
    fin.close ();
    fout.close ();
    return 0;
}