Submission #859011

# Submission time Handle Problem Language Result Execution time Memory
859011 2023-10-09T14:20:16 Z VinhLuu Palindromic Partitions (CEOI17_palindromic) C++17
60 / 100
645 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();
    if(n == 0){
        cout << 0 << "\n";
        return;
    }
    if(n == 1){
        cout << 1 << "\n";
        return;
    }
    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);
}
# Verdict Execution time Memory Grader output
1 Correct 8 ms 35932 KB Output is correct
2 Correct 7 ms 36056 KB Output is correct
3 Correct 7 ms 35932 KB Output is correct
4 Correct 7 ms 35932 KB Output is correct
5 Correct 7 ms 36036 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 8 ms 35932 KB Output is correct
2 Correct 7 ms 36056 KB Output is correct
3 Correct 7 ms 35932 KB Output is correct
4 Correct 7 ms 35932 KB Output is correct
5 Correct 7 ms 36036 KB Output is correct
6 Correct 8 ms 35928 KB Output is correct
7 Correct 7 ms 35932 KB Output is correct
8 Correct 7 ms 35932 KB Output is correct
9 Correct 8 ms 36072 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 8 ms 35932 KB Output is correct
2 Correct 7 ms 36056 KB Output is correct
3 Correct 7 ms 35932 KB Output is correct
4 Correct 7 ms 35932 KB Output is correct
5 Correct 7 ms 36036 KB Output is correct
6 Correct 8 ms 35928 KB Output is correct
7 Correct 7 ms 35932 KB Output is correct
8 Correct 7 ms 35932 KB Output is correct
9 Correct 8 ms 36072 KB Output is correct
10 Correct 645 ms 36992 KB Output is correct
11 Correct 78 ms 36440 KB Output is correct
12 Correct 17 ms 36696 KB Output is correct
13 Correct 292 ms 36624 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 8 ms 35932 KB Output is correct
2 Correct 7 ms 36056 KB Output is correct
3 Correct 7 ms 35932 KB Output is correct
4 Correct 7 ms 35932 KB Output is correct
5 Correct 7 ms 36036 KB Output is correct
6 Correct 8 ms 35928 KB Output is correct
7 Correct 7 ms 35932 KB Output is correct
8 Correct 7 ms 35932 KB Output is correct
9 Correct 8 ms 36072 KB Output is correct
10 Correct 645 ms 36992 KB Output is correct
11 Correct 78 ms 36440 KB Output is correct
12 Correct 17 ms 36696 KB Output is correct
13 Correct 292 ms 36624 KB Output is correct
14 Runtime error 82 ms 131072 KB Execution killed with signal 9
15 Halted 0 ms 0 KB -