This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define int long long
#define f(i, a, b) for(int i = a; i <= b; i++)
#define fr(i, a, b) for(int i = a; i >= b; i--)
#define pii pair <int, int>
#define fi first
#define se second
#define pb push_back
#define in insert
#define vvec vector<vector<int>>
using namespace std;
const int N = 1e6 + 5;
const int base = 311;
const int mod = 1e9 + 7;
const int mod2 = 1e6 + 3;
string s;
int n, m, t;
int Pow[N], Hash[N];
int Pow2[N], Hash2[N];
int get(int i, int j)
{
return (Hash[j] - Hash[i - 1] * Pow[j - i + 1] + mod * mod) % mod;
}
int get2(int i, int j)
{
return (Hash2[j] - Hash2[i - 1] * Pow2[j - i + 1] + mod2 * mod2) % mod2;
}
signed main()
{
ios_base :: sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> t;
Pow[0] = Pow2[0] = 1;
f(i ,1, mod2 - 2)
{
Pow[i] = (Pow[i - 1] * base) % mod;
Pow2[i] = (Pow2[i - 1] * base) % mod2;
}
while(t--)
{
cin >> s;
n = s.size();
s = "!" + s;
f(i, 1, n)
{
Hash[i] = (Hash[i - 1] * base + s[i] - 'a' + 1) % mod;
Hash2[i] = (Hash2[i - 1] * base + s[i] - 'a' + 1) % mod2;
}
int l = 0, ok = 0, cnt = 0;
f(i, 1, n / 2)
{
if(s[i] == s[n - i + 1] && l == 0)
{
cnt += 2;
if(i == n / 2) ok = 1;
//cout << i << " " << n - i + 1 << "\n";
}
else
{
if(!l) l = i;
int j = n - l + 1;
int k = n - i + 1;
int left = get(l, i);
int left2 = get2(l, i);
int right = get(k, j);
int right2 = get2(k, j);
//cout << l << " " << i << " " << k << " " << j << "\n";
//cout << left << " " << left2 << " " << right << " " << right2 << "\n";
if(left == right && right2 == left2)
{
if(i == n / 2) ok = 1;
l = 0;
//cout << "cc\n";
cnt += 2;
}
}
}
if(!ok || n % 2 == 1) cnt++;
cout << cnt << "\n";
}
}
# | 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... |