Pagini recente » Cod sursa (job #162052) | Cod sursa (job #1575555) | Cod sursa (job #985564) | Cod sursa (job #728066) | Cod sursa (job #856906)
Cod sursa(job #856906)
#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;
}