Pagini recente » Cod sursa (job #1975497) | Cod sursa (job #874248) | Cod sursa (job #3177121) | Cod sursa (job #2411054) | Cod sursa (job #2921910)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
vector<int> prefix_function(string s) {
int n = s.size();
vector<int> pi(n);
for (int i = 1; i < n; i++) {
int j = pi[i-1];
while (j > 0 && s[i] != s[j])
j = pi[j-1];
if (s[i] == s[j])
j++;
pi[i] = j;
}
return pi;
}
vector<int> z_function(char *s) {
int n = strlen(s);
vector<int> z(n);
for (int i = 1, l = 0, r = 0; i < n; ++i) {
if (i <= r)
z[i] = min (r - i + 1, z[i - l]);
while (i + z[i] < n && s[z[i]] == s[i + z[i]])
++z[i];
if (i + z[i] - 1 > r)
l = i, r = i + z[i] - 1;
}
return z;
}
int main()
{
int t;char s[1000005];
fin>>t;
while(t--)
{
fin>>s;
int n=strlen(s),ans=0;
vector<int>z=z_function(s);
//for(int i=0;i<n;i++) cout<<pi[i]<<" ";cout<<"\n";
//for(int i=0;i<n;i++) cout<<z[i]<<" ";cout<<"\n";
for(int i=1;i<=n;i++)
/// if(z[i-1]&&i%(i-z[i-1])==0) ans=i;
if(z[i-1]&&(i+z[i-1]-1)%(i-1)==0) ans=max(ans,i+z[i-1]-1);
fout<<ans<<"\n";
}
return 0;
}