Submission #986286

#TimeUsernameProblemLanguageResultExecution timeMemory
986286vjudge1Palindromic Partitions (CEOI17_palindromic)C++17
100 / 100
95 ms28756 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ld long double #define ull unsigned long long #define pii pair<int,int> #define pll pair<long long, long long> #define fi first #define se second #define all(a) (a).begin(), (a).end() #define pb push_back #define lwb lower_bound #define upb upper_bound #define TASKNAME "NAME" void init() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); ///freopen(TASKNAME".INP","r",stdin); freopen(TASKNAME".OUT","w",stdout); } const int SZ = 1e6+5; const ll INF = INT_MAX / 2, MOD = 1e9+7, INFLL = 2e18, BASE = 311; const double epsilon = 1e-3; ll t, n, h[SZ], p[SZ]; string s; void buildHash() { h[0] = 0; p[0] = 1; for(int i = 1; i <= n; i++) { p[i] = (p[i-1] * BASE) % MOD; h[i] = (h[i-1] * BASE + int(s[i])) % MOD; } } ll getHash(int lo, int hi) { return ( (h[hi] - h[lo-1]*p[hi - lo + 1]) % MOD + MOD) % MOD; } int main() { init(); cin >> t; while(t--) { cin >> s; n = s.length(); s = " " + s; buildHash(); int i = 1, u = 1, j = n, v = n; int res = 0; while(i < j) { if(getHash(u, i) == getHash(j, v)) { res += 2; u = i+1; v = j-1; } i++; j--; } if(u <= v) res++; cout << res << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...