제출 #506167

#제출 시각아이디문제언어결과실행 시간메모리
506167LoboPalindromic Partitions (CEOI17_palindromic)C++17
100 / 100
299 ms28480 KiB
#include<bits/stdc++.h> using namespace std; const long long inf = (long long) 1e18 + 10; const int inf1 = (int) 1e9 + 10; #define int long long #define dbl long double #define endl '\n' #define sc second #define fr first #define mp make_pair #define pb push_back #define all(x) x.begin(), x.end() #define maxn 1100000 int n; int mdh = 1e9 + 7; int pwh[maxn], hsh[maxn]; void prephash(string s) { pwh[0] = 1; pwh[1] = 5131; for(int i = 2; i <= n; i++) { pwh[i] = pwh[i-1]*pwh[1]; pwh[i]%= mdh; } hsh[0] = 0; for(int i = 1; i <= n; i++) { hsh[i] = (hsh[i-1]*pwh[1] + s[i-1])%mdh; } } int subhash(int l, int r) { return ((hsh[r]- hsh[l-1]*pwh[r-l+1])%mdh + mdh)%mdh; } void solve() { string s; cin >> s; n = s.size(); prephash(s); int ans = 0; int l = 1, r = n; int i = 0; while(l+i < r-i) { if(subhash(l,l+i) == subhash(r-i,r)) { l = l+i+1; r = r-i-1; i = 0; ans+= 2; } else { i++; } } if(l <= r) ans++; cout << ans << endl; } int32_t main() { ios::sync_with_stdio(false); cin.tie(0); // freopen("in.in", "r", stdin); //freopen("out.out", "w", stdout); int tt = 1; cin >> tt; while(tt--) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...