Pagini recente » Cod sursa (job #2650990) | Cod sursa (job #1418450) | Cod sursa (job #70628) | Cod sursa (job #1669250) | Cod sursa (job #901003)
Cod sursa(job #901003)
#include <fstream>
#include <string>
#include <vector>
using namespace std;
ifstream cin;
ofstream cout;
string s;
vector < int > pre;
int main()
{
cin.open("prefix.in");
cout.open("prefix.out");
int T;
cin >> T;
cin.ignore();
while(T -- )
{
getline(cin, s);
pre.clear();
pre.push_back( - 1);
int q = - 1;
for(int i = 1; i < s.size(); ++ i)
{
while(q > - 1 && s[q + 1] != s[i]) q = pre[q];
if(s[q + 1] == s[i]) ++ q;
pre.push_back(q);
}
/*
for(int i = 0; i < s.size(); ++ i) cout << pre[i] + 1 << ' ';
cout << '\n';
*/
int sol = 0;
for(int i = s.size() - 1; i > 0; -- i)
{
int a, b, d;
a = i;
b = pre[i];
d = a - b;
if(b == - 1) continue;
while(d == a - b && b != - 1)
{
a = b;
while(d > a - b && b != - 1) b = pre[b];
}
if(b == - 1 && d == a - b)
{
sol = i + 1;
break;
}
}
cout << sol << '\n';
}
cin.close();
cout.close();
return 0;
}