Submission #1295833

#TimeUsernameProblemLanguageResultExecution timeMemory
1295833fairkrashGrowing Vegetable is Fun 3 (JOI19_ho_t3)C++20
75 / 100
526 ms136456 KiB
#include <bits/stdc++.h> using namespace std; using ll = short int; ll INF = 3e4; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); ll n; cin >> n; string s; cin >> s; ll v1 = (ll) 0, v2 = (ll) 0, v3 = (ll) 0; vector<ll> d1, d2, d3; for (ll i = (ll) 0; i < s.size(); i++) { if (s[i] == 'R') { v1++; d1.push_back(i); } if (s[i] == 'G') { v2++; d2.push_back(i); } if (s[i] == 'Y') { v3++; d3.push_back(i); } } ll mx = max({v1, v2, v3}); if (mx > n - mx + 1) { cout << -1; return (ll) 0; } vector<vector<vector<vector<ll>>>> dp(v1 + 2, vector<vector<vector<ll>>>(v2 + 2, vector<vector<ll>>(v3 + 2, vector<ll>(3, INF)))); dp[1][(ll) 0][(ll) 0][(ll) 0] = (ll) 0; dp[(ll) 0][1][(ll) 0][1] = (ll) 0; dp[(ll) 0][(ll) 0][1][2] = (ll) 0; for (ll a = (ll) 0; a <= v1; a++) { for (ll b = (ll) 0; b <= v2; b++) { for (ll c = (ll) 0; c <= v3; c++) { if (a + b + c == (ll) 0)continue; { ll e = 0; ll j = 1; if (b != v2) { ll k = d2[b]; ll h1 = max((ll) (a - (upper_bound(d1.begin(), d1.end(), k) - d1.begin())), (ll) 0); ll h2 = max((ll) (b - (upper_bound(d2.begin(), d2.end(), k) - d2.begin())), (ll) 0); ll h3 = max((ll) (c - (upper_bound(d3.begin(), d3.end(), k) - d3.begin())), (ll) 0); dp[a][b + 1][c][j] = min((ll) dp[a][b + 1][c][j], (ll) (dp[a][b][c][e] + h1 + h2 + h3)); } j = 2; if (c != v3) { ll k = d3[c]; ll h1 = max((ll) (a - (upper_bound(d1.begin(), d1.end(), k) - d1.begin())), (ll) 0); ll h2 = max((ll) (b - (upper_bound(d2.begin(), d2.end(), k) - d2.begin())), (ll) 0); ll h3 = max((ll) (c - (upper_bound(d3.begin(), d3.end(), k) - d3.begin())), (ll) 0); dp[a][b][c + 1][j] = min((ll) dp[a][b][c + 1][j], (ll) (dp[a][b][c][e] + h1 + h2 + h3)); } } { ll e = 1; ll j = 2; if (c != v3) { ll k = d3[c]; ll h1 = max((ll) (a - (upper_bound(d1.begin(), d1.end(), k) - d1.begin())), (ll) 0); ll h2 = max((ll) (b - (upper_bound(d2.begin(), d2.end(), k) - d2.begin())), (ll) 0); ll h3 = max((ll) (c - (upper_bound(d3.begin(), d3.end(), k) - d3.begin())), (ll) 0); dp[a][b][c + 1][j] = min((ll) dp[a][b][c + 1][j], (ll) (dp[a][b][c][e] + h1 + h2 + h3)); } j = 0; if (a != v1) { ll k = d1[a]; ll h1 = max((ll) (a - (upper_bound(d1.begin(), d1.end(), k) - d1.begin())), (ll) (ll) 0); ll h2 = max((ll) (b - (upper_bound(d2.begin(), d2.end(), k) - d2.begin())), (ll) 0); ll h3 = max((ll) (c - (upper_bound(d3.begin(), d3.end(), k) - d3.begin())), (ll) 0); dp[a + 1][b][c][j] = min((ll) dp[a + 1][b][c][j], (ll) (dp[a][b][c][e] + h1 + h2 + h3)); } } { ll e = 2; ll j = 0; if (a != v1) { ll k = d1[a]; ll h1 = max((ll) (a - (upper_bound(d1.begin(), d1.end(), k) - d1.begin())), (ll) (ll) 0); ll h2 = max((ll) (b - (upper_bound(d2.begin(), d2.end(), k) - d2.begin())), (ll) 0); ll h3 = max((ll) (c - (upper_bound(d3.begin(), d3.end(), k) - d3.begin())), (ll) 0); dp[a + 1][b][c][j] = min((ll) dp[a + 1][b][c][j], (ll) (dp[a][b][c][e] + h1 + h2 + h3)); } j = 1; if (b != v2) { ll k = d2[b]; ll h1 = max((ll) (a - (upper_bound(d1.begin(), d1.end(), k) - d1.begin())), (ll) 0); ll h2 = max((ll) (b - (upper_bound(d2.begin(), d2.end(), k) - d2.begin())), (ll) 0); ll h3 = max((ll) (c - (upper_bound(d3.begin(), d3.end(), k) - d3.begin())), (ll) 0); dp[a][b + 1][c][j] = min((ll) dp[a][b + 1][c][j], (ll) (dp[a][b][c][e] + h1 + h2 + h3)); } } } } } cout << min({dp[v1][v2][v3][(ll) 0], dp[v1][v2][v3][1], dp[v1][v2][v3][2]}); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...