#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 5;
const long long mod = 1e9 + 7;
const long long mod1 = 1e9 + 22071997;
const int base = 31, base1 = 37;
long long h[maxn], h1[maxn];
long long p[maxn], p1[maxn];
string s;
int n;
long long binpow(long long a, long long b, long long m){
if (a == 0) return 0;
if (b == 0) return 1;
if (b == 1) return a;
long long res = binpow(a, b / 2, m);
if (b % 2 == 0) return res * res % m;
return res * res % m * a % m;
}
void build(){
for (int i=1; i<=n; i++){
h[i] = h[i - 1] * base + (s[i] - 'a' + 1);
h1[i] = h1[i - 1] * base1 + (s[i] - 'a' + 1);
h[i] %= mod;
h1[i] %= mod1;
}
}
long long gethash(int l, int r, long long *a, long long *power, long long m){
return (a[r] - (a[l - 1] * power[r - l + 1] % m) + m * m) % m;
}
bool check(int l, int r, int l1, int r1){
return (gethash(l, r, h, p, mod) == gethash(l1, r1, h, p, mod)
&& gethash(l, r, h1, p1, mod1) == gethash(l1, r1, h1, p1, mod1));
}
void buildp(){
p[0] = p1[0] = 1;
p[1] = base;
p1[1] = base1;
for (int i=2; i<=1000000; i++){
p[i] = p[i - 1] * base;
p1[i] = p1[i - 1] * base1;
p[i] %= mod;
p1[i] %= mod1;
}
}
int main()
{
ios_base :: sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
buildp();
int t;
cin >> t;
while (t--){
cin >> s;
n = s.size();
s = " " + s;
build();
int l = 1, r = n, lastl = 1, lastr = n;
int dem = 0;
while (l < r){
if (check(lastl, l, r, lastr)){
dem += 2;
lastl = l + 1;
lastr = r - 1;
}
l++;
r--;
}
if (lastl <= lastr) dem++;
cout << dem << '\n';
}
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |