Pagini recente » Cod sursa (job #3182856) | Cod sursa (job #2068177) | Cod sursa (job #1830351) | Cod sursa (job #1937889) | Cod sursa (job #852804)
Cod sursa(job #852804)
#include <fstream>
#include <cstring>
using namespace std;
int t, i, n, k, pi[1000010];
string s;
void prefix()
{
k = 0;
for(i = 2; i <= n; i++)
{
while(k and s[i] != s[k+1]) k = pi[k];
if(s[i] == s[k+1]) k++;
pi[i] = k;
}
}
int main()
{
ifstream fi("prefix.in");
ofstream fo("prefix.out");
fi >> t;
while(t--)
{
fi >> s;
n = s.length();
s = " " + s;
prefix();
for(i = n; i > 0; i--)
if((pi[i] != 0) and (i%(i-pi[i]) == 0))
{
fo << i << "\n";
break;
}
if(i == 0) fo << "0\n";
}
return 0;
}