Submission #110796

#TimeUsernameProblemLanguageResultExecution timeMemory
110796someone_aaPalindromic Partitions (CEOI17_palindromic)C++17
100 / 100
498 ms29644 KiB
#include <bits/stdc++.h> #define ll long long using namespace std; const int N = 1000010; const ll mod = 1000000007; const ll p = 61; ll pref[N], inv[N]; string code; void init(string x) { x = "a" + x; pref[1] = x[1]-'a'+1; ll pp = p; for(int i=2;i<x.length();i++) { pref[i] = 1LL*(pref[i-1]+((x[i]-'a'+1)*pp)%mod)%mod; pp *= p; pp%=mod; } } ll power(ll a, ll b) { if(b==0) return 1LL; else if(b==1) return 1LL*(a%mod); else { if(b%2==1) { ll temp = power(a, b-1); return (a*temp)% mod; } else { ll temp = power(a, b/2); return (temp*temp)%mod; } } } ll calc_mod(ll a) { return 1LL*(a%mod + mod)%mod; } ll get_hash(int li, int ri) { ll x = pref[ri+1]-pref[li]; x = calc_mod(x); ll y = inv[li]; return 1LL*(x*y) % mod; } int solve(string x) { if(x.length()==1) { return 1; } memset(pref,0,sizeof(pref)); init(x); int n = x.length(); int l1 = 0, r1=0; int l2 = n-1, r2=n-1; int br = 0; while(true) { if(r1+1==l2) { br++; if(get_hash(l1,r1) == get_hash(l2,r2)) br++; break; } if(r1+1==l2-1) { br++; if(get_hash(l1,r1) == get_hash(l2,r2)) br+=2; break; } if(get_hash(l1, r1) == get_hash(l2, r2)) { br+=2; l1 = r1 = r1+1; l2 = r2 = l2-1; } else { r1++; l2--; } } return br; } void init_start() { ll pp = 1LL; for(int i=0;i<N;i++) { inv[i] = power(pp, mod-2); pp *= p; pp%=mod; } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); init_start(); int te; cin>>te; while(te--) { cin>>code; cout<<solve(code)<<"\n"; } return 0; }

Compilation message (stderr)

palindromic.cpp: In function 'void init(std::__cxx11::string)':
palindromic.cpp:14:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=2;i<x.length();i++) {
                 ~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...