제출 #1170300

#제출 시각아이디문제언어결과실행 시간메모리
1170300DangKhoizzzzPalindromic Partitions (CEOI17_palindromic)C++20
60 / 100
5 ms4876 KiB
#include <bits/stdc++.h> #define int long long #define fi first #define se second #define pii pair <int , int> #define arr3 array <int , 3> /* + array limit ??? + special case ??? n = 1? + time limit ??? */ using namespace std; const int mod = 1e9 + 7; const int base = 37; const int INF = 1e18 + 7; const int maxn = 2e5 + 7; int n , prehash[maxn] , prepow[maxn]; string s; void build_hash() { prepow[0] = 1; for(int i = 1; i <= n; i++) { prepow[i] = (prepow[i-1] * base)%mod; } for(int i = 1; i <= n; i++) { prehash[i] = (prehash[i-1]*base + (s[i] - 'a'))%mod; } } int gethash(int l , int r) { return (prehash[r] - prehash[l-1]*prepow[r - l + 1] + mod*mod)%mod; } void solve() { cin >> s; n = s.size(); s = '@' + s; build_hash(); int l1 = 1 , r1 = 1; int l2 = n , r2 = n; int ans = 0; int remain = n; while(r1 <= n/2) { while(r1 <= n/2) { if(gethash(l1 , r1) == gethash(l2 , r2)) { ans += 2; remain -= (r1 - l1 + 1)*2; break; } r1++; l2--; } r1++; l1 = r1; l2--; r2 = l2; } cout << ans + (remain > 0) << '\n'; } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int t; cin >> t; while(t--)solve(); 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...