#include <bits/stdc++.h>
using namespace std;
#include <tr2/dynamic_bitset>
using dynamic_bitset = tr2::dynamic_bitset<>;
#define db dynamic_bitset
#define ll long long
#define el endl
#define pb push_back
// #define sz(a) (int)a.size()
#define yes cout << "YES"<<el
#define no cout << "NO" << el
#define all(v) v.begin(), v.end()
#define sp ' '
const int N = 5e4 + 1;
/*
A Wise Man Once Said: if it works , don't touch it
and a real Man said : " تجري الرياح بما شاء الاله لها, لله نحن وموج البحر والسفن "
but me want say
#define ريح rating
#define سفن expert
" ما عدت أدري كيف الريح اتيه اني غارق حيث لاريح ولا سفن "
*/
const ll M2 = 998244353;
const ll M1 = 1000000007;
const ll M = 998244353;
struct Hashing {
private:
int mod1 = 1e9 + 123, mod2 = 998244353;
ll base1, base2, h1, h2, inv1, inv2, *pw1, *pw2, len;
deque<char> d;
ll power(ll a,ll b,ll m) {
ll ans = 1;
while (b > 0) {
if (b & 1) {
ans = (ans * a) % m;
}
a = (a * a) % m;
b >>= 1;
}
return ans;
}
public:
Hashing(int sz,ll x = 131,ll y = 69420) {
base1 = x;
base2 = y;
h1 = h2 = len = 0;
inv1 = power(x, mod1 - 2, mod1);
inv2 = power(y, mod2 - 2, mod2);
pw1 = new ll[sz + 1];
pw2 = new ll[sz + 1];
pw1[0] = pw2[0] = 1;
for (int i = 1; i <= sz; i++) {
pw1[i] = (x * pw1[i - 1]) % mod1;
pw2[i] = (y * pw2[i - 1]) % mod2;
}
}
void push_back(char x) {
x = x - 'a' + 1;
h1 = (h1 * base1) % mod1;
h1 = (h1 + x) % mod1;
h2 = (h2 * base2) % mod2;
h2 = (h2 + x) % mod2;
len++;
d.emplace_back(x);
}
void push_front(char x) {
x = x - 'a' + 1;
h1 = (h1 + (x * pw1[len]) % mod1) % mod1;
h2 = (h2 + (x * pw2[len]) % mod2) % mod2;
len++;
d.emplace_front(x);
}
void pop_back() {
if (len == 0)return;
char x = d.back();
d.pop_back();
h1 = (h1 - x + mod1) % mod1;
h1 = (h1 * inv1) % mod1;
h2 = (h2 - x + mod2) % mod2;
h2 = (h2 * inv2) % mod2;
len--;
}
void pop_front() {
if (len == 0)return;
char x = d.front();
d.pop_front();
len--;
h1 = ((h1 - x * pw1[len] % mod1) + mod1) % mod1;
h2 = ((h2 - x * pw2[len] % mod2) + mod2) % mod2;
}
void clear() {
h1 = h2 = len = 0;
d.clear();
}
bool operator==(const Hashing &H) const {
return H.h1 == h1 && H.h2 == h2;
}
string GetString() {
return string(d.begin(), d.end());
}
pair<ll, ll> GetHash() {
return {h1, h2};
}
};
const int BASE = 265;
ll mul(ll a, ll b, ll m) { return a * 1ll * b % m; }
ll add(ll a, ll b, ll m) {
return ((a + b) % m + m) % m;
}
ll fp(ll b, ll p, ll m) {
ll res = 1;
while (p) {
if (p & 1) res = mul(res, b, m);
p >>= 1;
b = mul(b, b, m);
}
return res;
}
ll inv(ll x, ll m) {
return fp(x, m - 2, m);
}
int gen_base(const int before, const int after) {
auto seed = std::chrono::high_resolution_clock::now().time_since_epoch().count();
std::mt19937 mt_rand(seed);
int base = std::uniform_int_distribution<int>(before + 1, after)(mt_rand);
return base % 2 == 0 ? base - 1 : base;
}
void solve() {
string s;
cin >> s;
int n = s.size();
int cnt = 0;
int i = 0, j = n - 1;
Hashing hl(1e6 + 1), hr(1e6 + 1);
bool cle = false ;
while (i < j) {
hl.push_back(s[i]);
hr.push_front(s[j]);
if (hl == hr) {
cnt += 2;
hl.clear();
hr.clear();
cle = true;
}else cle = false;
i++;
j--;
}
if (n % 2 == 0) {
if (!cle) cnt++;
cout << cnt << el;
}
else cout << (cnt + 1) << el;
}
int main() {
//freopen("filename.in", "r", stdin);
//freopen("filename.out", "w", stdout);
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
freopen("error.txt", "w", stderr);
#endif ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int tt = 1;
cin >> tt;
while (tt-- > 0) {
solve();
}
return 0;
}
Compilation message (stderr)
palindromic.cpp:190:11: warning: extra tokens at end of #endif directive [-Wendif-labels]
190 | #endif ios_base::sync_with_stdio(0);
| ^~~~~~~~
palindromic.cpp: In function 'int main()':
palindromic.cpp:187:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
187 | freopen("input.txt", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
palindromic.cpp:188:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
188 | freopen("output.txt", "w", stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
palindromic.cpp:189:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
189 | freopen("error.txt", "w", stderr);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
# | 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... |