Submission #1170652

#TimeUsernameProblemLanguageResultExecution timeMemory
1170652chikien2009Palindromic Partitions (CEOI17_palindromic)C++20
100 / 100
200 ms34572 KiB
#include <bits/stdc++.h> using namespace std; void setup() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); } const long long mod = 1e9 + 9, base = 29; long long powmod[1000001], invmod[1000001]; inline long long Bpow(long long inp, long long ind) { long long res = 1; do { if (ind & 1) { res = (res * inp) % mod; } inp = (inp * inp) % mod; } while (ind >>= 1); return res; } inline void PreCalculate() { powmod[0] = 1; invmod[0] = Bpow(powmod[0], mod - 2); for (int i = 1; i <= 1e6; ++i) { powmod[i] = (powmod[i - 1] * base) % mod; invmod[i] = Bpow(powmod[i], mod - 2); } } class HASH_STRING { private: vector<long long> pre; public: inline void Init(string inp) { pre.clear(); pre.resize(inp.size() + 1, 0); inp = '#' + inp; for (int i = 1; i < inp.size(); ++i) { pre[i] = (pre[i - 1] + powmod[i] * (inp[i] - 'a' + 1)) % mod; } } inline long long GetHash(int l, int r) { return ((pre[r] - pre[l - 1]) * invmod[l] + mod * mod) % mod; } }; int t, res; string s; HASH_STRING hash_s; int main() { setup(); PreCalculate(); cin >> t; while (t--) { cin >> s; res = 0; hash_s.Init(s); for (int i = 1, j = s.size(); i <= j;) { for (int k = 0; k <= j - i; ++k) { if (hash_s.GetHash(i, i + k) == hash_s.GetHash(j - k, j)) { res += 1 + (j - i != k); i += k + 1; j -= k + 1; break; } } } cout << res << "\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...