Submission #928681

#TimeUsernameProblemLanguageResultExecution timeMemory
928681RegulusPalindromic Partitions (CEOI17_palindromic)C++17
100 / 100
190 ms19604 KiB
#include <bits/stdc++.h> #define IO ios::sync_with_stdio(false);cin.tie(0); #define debug(x) cerr << #x << " = " << (x) << ' ' #define bug(x) cerr << (x) << ' ' #define endl cerr << '\n' #define all(v) (v).begin(), (v).end() #define SZ(v) (ll)(v).size() #define lowbit(x) (x)&-(x) #define pb emplace_back #define F first #define S second using namespace std; using ll = long long; using pll = pair<ll, ll>; const int N = 1e6+5; const int MOD = 19993; const int MOD2 = 1e9+7; ll sum[N], p[N]; string s; int main(void) { IO int T, n, i; cin >> T; do { cin >> s, n = SZ(s); s = " " + s; for (i=1; i <= n; ++i) sum[i] = (sum[i-1] * MOD % MOD2 + s[i]) % MOD2; for (i=1, p[0]=1; i <= n; ++i) p[i] = p[i-1] * MOD % MOD2; //for (i=1; i <= n; ++i) bug(sum[i]); endl; int ans = 0, L = 1, R = n; while (L <= R) { for (i=0; i < n; ++i) { ll tmp = (sum[L+i] - (sum[L-1] * p[i+1] % MOD2) + MOD2) % MOD2; ll tmp2 = (sum[R] - (sum[R-i-1] * p[i+1] % MOD2) + MOD2) % MOD2; //debug(tmp), debug(tmp2), endl; if (tmp == tmp2) break; } if (R-L == i) ++ans; else ans += 2; //debug(L), debug(R), debug(i), endl; L += i + 1, R -= i + 1; } cout << ans << '\n'; } while (--T); 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...