Pagini recente » Cod sursa (job #37892) | Cod sursa (job #1507827) | Cod sursa (job #1948556) | Cod sursa (job #2250442) | Cod sursa (job #3161185)
#include <bits/stdc++.h>
#include <random>
#include <chrono>
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const char nl = '\n';
const char sp = ' ';
const int inf = 0x3f3f3f3f;
const long long INF = 1000000000000000000;
const int mod = 1e9 + 7;
const char out[2][4]{ "NO", "YES" };
#define all(a) a.begin(), a.end()
using ll = long long;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
#define variableName(var) #var
#define __debug(var) cout << #var << " = " << var << '\n'
inline int rint(int a, int b) { return uniform_int_distribution<int>(a, b)(rng); }
ll ppow(ll n, ll p) {
if (p == 0) {
return 1;
}
ll rt = ppow(n, p >> 1);
return (rt * rt % mod) * (p & 1 ? n : 1) % mod;
}
const int base = 123457;
const int inv_base = ppow(base, mod - 2);
const int nmax = 1e6;
char str[nmax + 5];
ll h[nmax + 5]{ 0 };
ll p[nmax + 5]{ 1 };
ll q[nmax + 5]{ 1 };
int n;
ll get(int l, int r) {
return ((h[r] - h[l - 1] + mod) % mod) * q[l - 1] % mod;
}
void testcase() {
fin >> str;
n = strlen(str);
for (int i = 1; i <= n; ++i) {
h[i] = (h[i - 1] + (str[i - 1] - 'a' + 1) * p[i] % mod) % mod;
}
int ans = 0;
for (int i = 1; i <= n; ++i) {
// i - lenght of piece
int len = i;
while (len + i <= n && get(1, i) == get(len + 1, len + i)) {
len += i;
}
if (len > i) {
ans = max(ans, len);
}
}
fout << ans << nl;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
for (int i = 1; i <= nmax; ++i) {
p[i] = p[i - 1] * base % mod;
q[i] = q[i - 1] * inv_base % mod;
}
int tc;
fin >> tc;
for (int t = 1; t <= tc; ++t) {
#ifdef LOCAL
cerr << "=== Subtask " << t << " ===" << nl;
#endif
testcase();
#ifdef LOCAL
cerr << nl;
#endif
}
}