제출 #1150292

#제출 시각아이디문제언어결과실행 시간메모리
1150292dostsPalindromic Partitions (CEOI17_palindromic)C++20
100 / 100
1006 ms12008 KiB
#include <bits/stdc++.h> #pragma GCC target("avx2") #pragma GCC optimize("O3,unroll-loops") using namespace std; #define int long long #define pii pair<int,int> #define ff first #define ss second #define sp << " " << #define all(cont) cont.begin(),cont.end() #define vi vector<int> const int inf = 1e17,N = 2e6+1,MOD = (1LL<<61)-1,B = 23; int add(int x,int y) { return ((x+y >= MOD)?(x+y-MOD):(x+y)); } int mult(__int128_t x,__int128_t y) { return (x*y)%MOD; } int expo(int x,int y) { if (!y) return 1; int e = expo(x,y/2); e = mult(e,e); if (y&1) e = mult(e,x); return e; } struct Hash{ vi roll; int n; Hash(string& s) { n = s.size(); roll.resize(n+1); for (int i=1;i<=n;i++) { roll[i] = add(s[i-1],mult(B,roll[i-1])); } } int get(int l,int r) { if (l == 1) return roll[r]; return add(roll[r],MOD-mult(expo(B,r-l+1),roll[l-1])); } }; void solve() { string s; cin >> s; int n = s.size(); int ptr = 1,ptr2 = n; int ans = 0; Hash h(s); bool finito = 0; while (1) { bool found = 0; int p = ptr,p2 = ptr2; for (;ptr < ptr2;ptr++,ptr2--) { if (h.get(ptr2,p2) == h.get(p,ptr)) { ans+=2; if (ptr == ptr2-1) finito = 1; ptr++,ptr2--; found = 1; break; } } if (!found) break; } if (!finito) ans++; cout << ans << '\n'; } int32_t main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #ifdef Dodi freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif int t = 1; cin >> t; while (t --> 0) 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...