Submission #121596

#TimeUsernameProblemLanguageResultExecution timeMemory
121596BigChungusPalindromic Partitions (CEOI17_palindromic)C++14
0 / 100
20 ms8192 KiB
#include <bits/stdc++.h> using namespace std; #define egal(a, b, c, d) () const int N = 1e6 + 7, BASE = 'z' - 'a' + 1; int MOD[2]; int paw[N][2], hesh[N][2]; string s; int abs(int val, bool mod) { if (val < 0) return val + MOD[mod]; return val; } int main() { MOD[0] = 1e9 + 7, MOD[1] = 1e9 + 9; ios_base::sync_with_stdio(NULL); cin.tie(0); cout.tie(0); int t; cin >> t; //hatz putere ca ne trebe impreuna cu hash sa bagam egal(i,j,k,t) paw[0][0] = paw[0][1] = 1; for (int i = 1; i < N; ++i) for (int t = 0; t < 2; ++t) paw[i][t] = paw[i - 1][t] * BASE % MOD[t]; while (t--) { cin >> s; ///mare hashuri de sa moara dushmanii int n = s.size(); hesh[1][0] = hesh[1][1] = (s[0] - 'a'); for (int i = 1; i < n; ++i) for (int t = 0; t < 2; ++t) hesh[i + 1][t] = hesh[i][t] * BASE + (s[i] - 'a'); int j(1), ans(0);//unde ai ramas, adeverat bossule for (int i = 1; i <= n / 2; ++i) { if (abs(hesh[i][0] - hesh[j - 1][0] * paw[i - j + 1][0] % MOD[0], 0) == abs(hesh[n - j + 1][0] - hesh[n - i][0] * paw[i - j + 1][0] % MOD[0], 0) && abs(hesh[i][1] - hesh[j - 1][1] * paw[i - j + 1][1] % MOD[1], 1) == abs(hesh[n - j + 1][1] - hesh[n - i][1] * paw[i - j + 1][1] % MOD[1], 1)) ans += 2, j = i + 1; } cout << ans + (2 * j - 2 != n) << ' '; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...