# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
154314 | 2019-09-20T12:27:21 Z | arnold518 | Palindromic Partitions (CEOI17_palindromic) | C++14 | 27 ms | 16092 KB |
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const int MAXN = 1e6; const ll MOD = 1e9+7; const ll P = 31; int TC, N, ans; char S[MAXN+10]; ll ppow[MAXN+10], ipow[MAXN+10], H[MAXN+10]; ll mypow(ll x, ll y) { if(y==0) return 1; if(y%2) return mypow(x, y-1)*x%MOD; ll t=mypow(x, y/2); return t*t%MOD; } ll calc(int l, int r) { ll t=H[r]-H[l-1]; t%=MOD; if(t<0) t+=MOD; t*=ipow[l]; t%=MOD; return t; } int main() { int i, j; ppow[0]=1; ipow[0]=1; ipow[1]=mypow(P, MOD-2); for(i=1; i<=MAXN; i++) ppow[i]=ppow[i-1]*P%MOD; for(i=2; i<=MAXN; i++) ipow[i]=ipow[i-1]*ipow[1]%MOD; scanf("%d", &TC); while(TC--) { scanf("%s", S+1); N=strlen(S+1); ans=1; for(i=1; i<=N; i++) H[i]=(S[i]-'a'+1)*ppow[i]%MOD; for(i=1; i<=N; i++) H[i]=(H[i-1]+H[i])%MOD; int it=1; for(i=1; i<=N/2; i++) if(calc(it, i)==calc(N-i+1, N-it+1)) { if(i!=N-i+1) ans+=2; else ans++; it=i+1; } printf("%d\n", ans); } }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 27 ms | 16092 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 27 ms | 16092 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 27 ms | 16092 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 27 ms | 16092 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |