Submission #425426

#TimeUsernameProblemLanguageResultExecution timeMemory
425426koioi.org-namnamseoGrowing Vegetable is Fun 3 (JOI19_ho_t3)C++17
15 / 100
3 ms1228 KiB
#include <iostream> #include <algorithm> using namespace std; #define rep(i, n) for (int i=0; i<n; ++i) #define rrep(i, n) for (int i=1; i<=n; ++i) const int maxn = 400 + 10; const int inf = int(1e9) + 10; int n; char s[maxn]; int pos[3][maxn]; int dp[maxn][maxn][maxn][3]; int ma, mb, mc; int main() { cin.tie(0)->sync_with_stdio(0); cin >> n >> (s+1); { int cnt[3] = {0, 0, 0}; rrep(i, n) { int v = (s[i]%4)-1; ++(v == 0 ? ma : (v == 1 ? mb : mc)); pos[v][++cnt[v]] = i; } } rrep(S, n) { for (int a=0; a<=S && a<=ma; ++a) { for (int b=0; b<=S-a && b<=mb; ++b) { int c = S-a-b; if (c>mc) continue; int *d = dp[a][b][c]; rep(i, 3) d[i] = inf; int is[3] = {a, b, c}; rep(ui, 3) { if (!is[ui]) continue; --is[ui]; int *bef = dp[is[0]][is[1]][is[2]]; ++is[ui]; rep(bi, 3) if (ui != bi && bef[bi] != inf) { d[ui] = min(d[ui], bef[bi]+abs( pos[ui][is[ui]]-S )); } } } } } int *aa = dp[ma][mb][mc]; int ans = *min_element(aa, aa+3); if (ans == inf) ans = -1; else ans /= 2; cout << ans << '\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...