Pagini recente » Cod sursa (job #44938) | Cod sursa (job #1358463) | Cod sursa (job #2404728) | Cod sursa (job #844272) | Cod sursa (job #3155676)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("prefix.in");
ofstream cout("prefix.out");
void test_case()
{
string s;
cin >> s;
int n = (int) s.size();
vector<int> LPS(n);
LPS[0] = 0;
for(int i = 1; i < n; i++)
{
int j = LPS[i - 1];
while(j > 0 && s[i] != s[j])
j = LPS[j - 1];
if(s[i] == s[j])
j++;
LPS[i] = j;
}
bool terminat = false;
int i = n - 1;
while(!terminat && i > 0)
{
if(LPS[i] != 0)
{
int pos = i;
int diff = i - LPS[i] + 1;
int steps = 0;
while(pos - LPS[pos] + 1 == diff && LPS[pos] != 0)
{
pos = pos - diff;
steps++;
}
if(pos + 1 == diff)
{
steps++;
cout << steps * diff << '\n';
terminat = true;
}
}
i--;
}
if(!terminat)
cout << 0 << '\n';
}
int main()
{
int T;
cin >> T;
while(T--)
test_case();
return 0;
}