답안 #859008

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
859008 2023-10-09T14:18:17 Z VinhLuu Palindromic Partitions (CEOI17_palindromic) C++17
60 / 100
644 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 + 555;
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(i > n) return 0;
    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 6 ms 35932 KB Output is correct
2 Correct 6 ms 36092 KB Output is correct
3 Correct 7 ms 35932 KB Output is correct
4 Correct 7 ms 35932 KB Output is correct
5 Correct 6 ms 36096 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 35932 KB Output is correct
2 Correct 6 ms 36092 KB Output is correct
3 Correct 7 ms 35932 KB Output is correct
4 Correct 7 ms 35932 KB Output is correct
5 Correct 6 ms 36096 KB Output is correct
6 Correct 7 ms 35940 KB Output is correct
7 Correct 7 ms 36188 KB Output is correct
8 Correct 7 ms 35932 KB Output is correct
9 Correct 9 ms 35932 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 35932 KB Output is correct
2 Correct 6 ms 36092 KB Output is correct
3 Correct 7 ms 35932 KB Output is correct
4 Correct 7 ms 35932 KB Output is correct
5 Correct 6 ms 36096 KB Output is correct
6 Correct 7 ms 35940 KB Output is correct
7 Correct 7 ms 36188 KB Output is correct
8 Correct 7 ms 35932 KB Output is correct
9 Correct 9 ms 35932 KB Output is correct
10 Correct 644 ms 36996 KB Output is correct
11 Correct 78 ms 36668 KB Output is correct
12 Correct 18 ms 36440 KB Output is correct
13 Correct 298 ms 36612 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 35932 KB Output is correct
2 Correct 6 ms 36092 KB Output is correct
3 Correct 7 ms 35932 KB Output is correct
4 Correct 7 ms 35932 KB Output is correct
5 Correct 6 ms 36096 KB Output is correct
6 Correct 7 ms 35940 KB Output is correct
7 Correct 7 ms 36188 KB Output is correct
8 Correct 7 ms 35932 KB Output is correct
9 Correct 9 ms 35932 KB Output is correct
10 Correct 644 ms 36996 KB Output is correct
11 Correct 78 ms 36668 KB Output is correct
12 Correct 18 ms 36440 KB Output is correct
13 Correct 298 ms 36612 KB Output is correct
14 Runtime error 81 ms 131072 KB Execution killed with signal 9
15 Halted 0 ms 0 KB -