제출 #1254370

#제출 시각아이디문제언어결과실행 시간메모리
1254370mngoc._.Palindromic Partitions (CEOI17_palindromic)C++20
100 / 100
104 ms21484 KiB
#include<bits/stdc++.h> using namespace std; #define int long long const int N = 1e6 + 5; const int base = 311; const int LOG = 32; const int MOD = 1e9 + 7; int hsh[N]; int hsh2[N]; int power[N]; int mngoc[N][LOG]; int nxt[N]; int n , m; string s; string t; int get(int l , int r){ return (hsh[r] - hsh[l - 1] * power[r - l + 1]%MOD + MOD) % MOD; } void solve(void){ cin >> s; n = s.size(); t = s; reverse(t.begin() , t.end()); s = '#' + s; t = '#' + t; power[0] = 1; hsh[0] = 0 ; hsh2[0] = 0; for(int i = 1 ; i <= n ; i++){ hsh[i] = (hsh[i - 1] * base + (s[i] - 'a' + 1)) % MOD; power[i] = (power[i - 1] * base) % MOD; } int l = 1 , r = n; int cnt = 0; for(int i = 1 ; i <= n / 2 ; i++){ if(l >= r) break; if(get(l , i) == get(r - (i - l) , r)){ cnt += 2; r = r - (i - l) - 1; l = i + 1; } } if(l <= (n + 1)/2) cnt++; cout << cnt << endl; } signed main(void){ ios_base :: sync_with_stdio(false); cin.tie(NULL); int testCase; cin >> testCase; while(testCase--){ 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...