Submission #479743

#TimeUsernameProblemLanguageResultExecution timeMemory
479743lightsebaGrowing Vegetable is Fun 3 (JOI19_ho_t3)C++17
15 / 100
423 ms757520 KiB
// I'm a paragraph. Click here to add your own text and edit me. It’s easy. // Just click “Edit Text” or double click me to add your own content // and make changes to the font. Feel free to drag and drop me anywhere // you like on your page. I’m a great place for you to tell a story // and let your users know a little more about you. #include <bits/stdc++.h> using namespace std; #define filename "" #define pb push_back #define mp make_pair #define eb emplace_back #define xx first #define yy second #define sz(x) ((int) size(x)) #define all(x) begin(x), end(x) #define rep(i, a, b) for(int i = a; i < b; i++) #define per(i, a, b) for(int i = a; i >= b; i--) using ll = long long; using ld = long double; using vi = vector<int>; using vl = vector<ll>; using pii = pair<int, int>; const int oo = 1e9; const int N = 400 + 1; int dp[N][N][N][3]; vi pos[3]; int go(int i, int j, int k, int c) { bool place0 = i < sz(pos[0]); bool place1 = j < sz(pos[1]); bool place2 = k < sz(pos[2]); if (!place0 && !place1 && !place2) return 0; if (dp[i][j][k][c] != -1) return dp[i][j][k][c]; place0 &= c != 0; place1 &= c != 1; place2 &= c != 2; int p = i + j + k; int ans = oo; if (place0) ans = min(ans, abs(p - pos[0][i]) + go(i + 1, j, k, 0)); if (place1) ans = min(ans, abs(p - pos[1][j]) + go(i, j + 1, k, 1)); if (place2) ans = min(ans, abs(p - pos[2][k]) + go(i, j, k + 1, 2)); return dp[i][j][k][c] = ans; } void solve() { memset(dp, -1, sizeof(dp)); int n; string s; cin >> n >> s; for (int i = 0; i < n; i++) { if (s[i] == 'R') pos[0].push_back(i); if (s[i] == 'G') pos[1].push_back(i); if (s[i] == 'Y') pos[2].push_back(i); } int ans = min(go(0, 0, 0, 0), go(0, 0, 0, 1)); if (ans >= oo) ans = -2; cout << ans / 2 << "\n"; } int main() { cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit); // freopen(filename ".in", "r", stdin); freopen(filename ".out", "w", stdout); // int t; cin >> t; while (t--) solve(); 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...