# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1226111 | theiulius | Palindromic Partitions (CEOI17_palindromic) | C++20 | 102 ms | 18924 KiB |
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ff first
#define ss second
#define pb push_back
// #define endl "\n"
const int MOD = 1e9 + 7, N = 1e6 + 6;
int n;
main(){
/*ifstream cin(".in");
ofstream cout(".out");*/
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int myp[N] = {1};
for (int i = 1; i < N; i++){
myp[i] = (myp[i - 1] * 31) % MOD;
}
cin >> n;
for (int k = 0; k < n; k++){
string s;
cin >> s;
int pre[s.size()] = {};
pre[0] = s[0] - 'a';
int num = 1;
for (int i = 1; i < s.size(); i++){
num *= 31;
num %= MOD;
// cout << ((s[i] - 'a') * num) << endl;
pre[i] = (pre[i - 1] + (s[i] - 'a') * num) % MOD;
}
int last = 0, ans = 0;
for (int i = 0; i < s.size() / 2; i++){
int a = pre[i];
if (last){
a -= pre[last - 1] - MOD;
a %= MOD;
}
int b = (pre[s.size() - 1 - last] - pre[s.size() - 2 - i] + MOD) % MOD;
int h = s.size() - 1 - last - i;
a *= myp[h];
a %= MOD;
if (a == b){
ans++;
last = i + 1;
}
}
ans *= 2;
if (s.size() % 2 || last != s.size() / 2){
ans++;
}
cout << ans << endl;
}
}
Compilation message (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... |