Pagini recente » Cod sursa (job #2286259) | Cod sursa (job #1554430) | Cod sursa (job #2671763) | Cod sursa (job #1420567) | Cod sursa (job #2951263)
#include <fstream>
#include <cstring>
using namespace std;
const int N = 1e6;
char s[N+1];
int pref[N];
int perioada()
{
int n = strlen(s);
memset(pref, 0, N*sizeof(int));
int lung = 0, rez = 0;
for (int i = 1; i < n; i++)
{
while (lung > 0 && s[lung] != s[i])
{
lung = pref[lung-1];
}
if (s[lung] == s[i])
{
lung++;
}
pref[i] = lung;
if (pref[i] != 0 && (i + 1) % (i + 1 - pref[i]) == 0)
{
rez = i + 1;
}
}
return rez;
}
int main()
{
ifstream in("prefix.in");
ofstream out("prefix.out");
int t;
in >> t;
for (int i = 0; i < t; i++)
{
in >> s;
out << perioada() << "\n";
}
in.close();
out.close();
return 0;
}