# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
627504 | a_aguilo | Palindromic Partitions (CEOI17_palindromic) | C++17 | 23 ms | 15924 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
const int p = 73;
const long long m = 1e11 + 3;
long long int hashes[1000000];
long long int powers[1000000];
int n;
long long getHash(int start, int ending){
if(start == 0) return hashes[ending];
return ((hashes[ending] - (hashes[start - 1] * powers[ending - start+1])%m)%m + m)%m;
}
int main(){
int t;
string s;
cin >> t;
while(t--){
cin >> s;
n = s.size();
memset(hashes, 0, sizeof(hashes));
memset(powers, 0, sizeof(powers));
hashes[0] = s[0]-'a'+1;
powers[0] = 1;
for(int i = 1; i < s.size(); ++i){
hashes[i] = (((__int128)hashes[i-1]*p)%m + (s[i]-'a' + 1))%m;
powers[i] = ((__int128)powers[i-1]*p)%m;
}
int ans = 1;
int MaxLeft = -1;
int MaxRight = s.size();
int left = 0; int right = s.size()-1;
while(left < right){
if(getHash(MaxLeft+1, left) == getHash(right, MaxRight-1)){
ans+=2;
MaxLeft = left;
MaxRight = right;
}
left++;
right--;
}
if(MaxLeft+1 == MaxRight)ans--;
cout << ans << endl;;
}
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |