Submission #548714

#TimeUsernameProblemLanguageResultExecution timeMemory
548714Ronin13Copy and Paste 3 (JOI22_copypaste3)C++14
57 / 100
3079 ms33748 KiB
#include<bits/stdc++.h> #define ll long long #define ull unsigned ll #define f first #define s second #define pii pair<int,int> #define pll pair<ll,ll> #define pb push_back #define epb emplace_back using namespace std; const int NMAX = 2501 + 1; const int inf = 1e9 + 1; const ll linf = 1e18 + 1; ll h[NMAX]; const ll mod = 1e9 + 7; const ll pr = 29; ll po[NMAX]; string s; void fil(){ int n = s.size(); h[0] = 0; for(int i = 1; i <= n; i++){ ll x = s[i - 1] - 'a'; h[i] = h[i - 1] * 29 + x; h[i] %= mod; } } ll gethash(int l, int r){ ll x = h[r] - h[l - 1] * po[r - l + 1]; x %= mod; x += mod; x %= mod; return x; } ll cnt[2501][2501]; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); po[0] = 1; for(int i = 1; i <= 2500; i++){ po[i] = po[i - 1] * pr; po[i] %= mod; } int n; cin >> n; for(int i = 1; i <= n; i++){ for(int j = 1; j <= n; j++){ cnt[i][j] = linf; } } cin >> s; ll a, b, c; cin >> a >> b >> c; fil(); for(int r = 1; r <= n; r++){ pii dp[n + 1]; for(int i = 1; i <= n; i++){ dp[i] = {inf, 0}; } dp[1] = {r, 1}; cnt[r][r] = a; for(int l = r - 1; l >= 1; l--){ for(int sz = 1; sz <= r - l + 1; sz++){ ll x = gethash(l, l + sz - 1); ll y = gethash(r - sz + 1, r); if(x == y){ if(dp[sz].f > l + sz - 1){ dp[sz].s++; dp[sz].f = l; } } } cnt[l][r] = cnt[l][r - 1] + a; for(int sz = 1; sz <= r - l + 1; sz++){ ll m = dp[sz].s; ll val = cnt[r - sz + 1][r]; cnt[l][r] = min(cnt[l][r], (c - sz * a) * m + (r - l + 1) * a + val + b); } } } /*for(int i = 1; i <= n; i++){ for(int j = 1; j <= n; j++){ if(cnt[i][j] == linf)cout << - 1 << " "; else cout << cnt[i][j] << " "; } cout << "\n"; }*/ cout << cnt[1][n]; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...