제출 #819721

#제출 시각아이디문제언어결과실행 시간메모리
819721isaachewPalindromic Partitions (CEOI17_palindromic)C++17
100 / 100
4590 ms27176 KiB
#include <bits/stdc++.h> /* Use hashing AAAAAAA AAAAAAA BBBB BBBB ABCABCA ABCABCA -> A BC A BC A (rotations) ABCDEABCDEABC -> ABC DE ABC DE ABC, original is not solution Greedy works */ int n,t; int hashbase; int hashmod=1000000007; long long binexp(int a,int b,int mod=hashmod){ b=(b%(mod-1)+(mod-1))%(mod-1); long long e=a; long long s=1; while(b){ if(b&1)s*=e; s%=mod; e=e*e%mod; b>>=1; } return s; } int main(){ std::ios_base::sync_with_stdio(false); std::cin.tie(0); std::mt19937 rgen(std::chrono::steady_clock().now().time_since_epoch().count()); std::cin>>t; for(;t--;){ hashbase=std::uniform_int_distribution(100000000,1000000006)(rgen); std::string s; std::cin>>s; n=s.size(); std::vector<long long> hashes(1); long long chash=0; for(int i=0;i<n;i++){ chash+=s[i]*binexp(hashbase,i,hashmod); chash%=hashmod; hashes.push_back(chash); } int progress=0; int last=0; int total=1; for(int i=1;i*2<=n;i++){ long long hash1=(hashes[i]-hashes[progress]+hashmod)%hashmod*binexp(hashbase,(n-i)-progress,hashmod)%hashmod; long long hash2=(hashes[n-progress]-hashes[n-i]+hashmod)%hashmod; //std::cout<<hash1<<' '<<hash2<<'\n'; if(hash1==hash2){ //std::cout<<i-progress<<'\n'; progress=i; total+=2; if(i*2==n)total--;//no substr in between } } std::cout<<total<<'\n'; } return 0; }

컴파일 시 표준 에러 (stderr) 메시지

palindromic.cpp: In function 'int main()':
palindromic.cpp:53:13: warning: unused variable 'last' [-Wunused-variable]
   53 |         int last=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...