답안 #858997

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
858997 2023-10-09T14:15:01 Z VinhLuu Palindromic Partitions (CEOI17_palindromic) C++14
60 / 100
544 ms 131072 KB
#include <bits/stdc++.h>
#define ll long long
#define int long long
using namespace std;

const ll mod = 1e9 + 7;
const int Max = 1e6 + 5;
const ll dm = 998244353;

string s[Max];
int dp[Max],n;
ll lt[Max],hs[Max],t[Max],pw[Max];

int get(int i,int j){
    return (hs[j]%mod + mod - (1LL * hs[i - 1]*lt[j - i + 1])%mod)%mod;
}

int got(int i,int j){
    return (t[j]%dm + dm - (1LL * t[i - 1]*pw[j - i + 1])%dm)%dm;
}

int dfs(int i){
    if(dp[i] != 0) return dp[i];
    dp[i] = 1;
    int l = i, r = n - i + 1;
    if(l > r) return dp[i] = 0;
    if(l == r) return dp[i] = 1;
    int mid = (r - l + 1) / 2;
    for(int j = 1; j <= mid; j ++){
        if(get(l, l + j - 1) == get(r - j + 1, r) && got(l, l + j - 1) == got(r - j + 1, r)){
            dp[i] = max(dp[i], 2 + dfs(l + j));
        }
    }
    return dp[i];
}


void solve(int c){
    n = s[c].size();
    s[c] = " " + s[c];
    for(int i = 1; i <= n; i ++){
        dp[i] = 0;
        hs[i] = ((1LL * hs[i - 1] * 26)%mod + (int)(s[c][i] - 'a'))%mod;
        t[i] = ((1LL * t[i - 1] * 26)%dm + (int)(s[c][i] - 'a'))%dm;
    }
    cout << dfs(1) << "\n";
}

signed main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int tt; cin >> tt;
    int mx = 0;
    for(int i = 1; i <= tt; i ++){
        cin >> s[i];
        mx = max(mx,(int)s[i].size());
    }
    lt[0] = 1;
    pw[0] = 1;
    for(int i = 1; i <= mx; i ++) lt[i] = (1LL * lt[i-1] * 26)%mod, pw[i] = (1LL * pw[i - 1] * 26)%dm;
    for(int i = 1; i <= tt; i ++) solve(i);
}
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 37724 KB Output is correct
2 Correct 7 ms 37724 KB Output is correct
3 Correct 7 ms 37724 KB Output is correct
4 Correct 7 ms 37724 KB Output is correct
5 Correct 7 ms 37724 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 37724 KB Output is correct
2 Correct 7 ms 37724 KB Output is correct
3 Correct 7 ms 37724 KB Output is correct
4 Correct 7 ms 37724 KB Output is correct
5 Correct 7 ms 37724 KB Output is correct
6 Correct 7 ms 37724 KB Output is correct
7 Correct 7 ms 37724 KB Output is correct
8 Correct 7 ms 37724 KB Output is correct
9 Correct 8 ms 37724 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 37724 KB Output is correct
2 Correct 7 ms 37724 KB Output is correct
3 Correct 7 ms 37724 KB Output is correct
4 Correct 7 ms 37724 KB Output is correct
5 Correct 7 ms 37724 KB Output is correct
6 Correct 7 ms 37724 KB Output is correct
7 Correct 7 ms 37724 KB Output is correct
8 Correct 7 ms 37724 KB Output is correct
9 Correct 8 ms 37724 KB Output is correct
10 Correct 544 ms 38812 KB Output is correct
11 Correct 71 ms 38492 KB Output is correct
12 Correct 17 ms 38236 KB Output is correct
13 Correct 288 ms 38444 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 37724 KB Output is correct
2 Correct 7 ms 37724 KB Output is correct
3 Correct 7 ms 37724 KB Output is correct
4 Correct 7 ms 37724 KB Output is correct
5 Correct 7 ms 37724 KB Output is correct
6 Correct 7 ms 37724 KB Output is correct
7 Correct 7 ms 37724 KB Output is correct
8 Correct 7 ms 37724 KB Output is correct
9 Correct 8 ms 37724 KB Output is correct
10 Correct 544 ms 38812 KB Output is correct
11 Correct 71 ms 38492 KB Output is correct
12 Correct 17 ms 38236 KB Output is correct
13 Correct 288 ms 38444 KB Output is correct
14 Runtime error 76 ms 131072 KB Execution killed with signal 9
15 Halted 0 ms 0 KB -