Submission #1190212

#TimeUsernameProblemLanguageResultExecution timeMemory
1190212DangKhoizzzzGrowing Vegetable is Fun 3 (JOI19_ho_t3)C++20
100 / 100
65 ms162888 KiB
#include <bits/stdc++.h> #define ll long long #define fi first #define se second #define pii pair <int , int> #define arr3 array <int , 3> using namespace std; const int INF = 1e9; const int maxn = 4e2 + 2; char s[maxn]; int n , dp[maxn][maxn][maxn][3] , cntr[maxn] , cntg[maxn] , cntb[maxn]; vector <int> posr = {-1} , posg = {-1} , posb = {-1}; void solve() { cin >> n; for(int i = 1; i <= n; i++) cin >> s[i]; for(int i = 1; i <= n; i++) { cntr[i] = cntr[i-1]; cntg[i] = cntg[i-1]; cntb[i] = cntb[i-1]; if(s[i] == 'R') { posr.push_back(i); cntr[i]++; } else if(s[i] == 'G') { posg.push_back(i); cntg[i]++; } else // B { posb.push_back(i); cntb[i]++; } if(max({cntr[i] , cntg[i] , cntb[i]}) > (n+1)/2) { cout << -1 << '\n'; return; } } for(int r = 0; r < posr.size(); r++) { for(int g = 0; g < posg.size(); g++) { for(int b = 0; b < posb.size(); b++) { if(r == 0 && g == 0 && b == 0) continue; // case R - 0 case if(r > 0) { dp[r][g][b][0] = min(dp[r-1][g][b][1] , dp[r-1][g][b][2]) + max(0 , g - cntg[posr[r]]) + max(0 , b - cntb[posr[r]]); } else dp[r][g][b][0] = INF; // case G - 1 case if(g > 0) { dp[r][g][b][1] = min(dp[r][g-1][b][0] , dp[r][g-1][b][2]) + max(0 , r - cntr[posg[g]]) + max(0 , b - cntb[posg[g]]); } else dp[r][g][b][1] = INF; // case B - 2 case if(b > 0) { dp[r][g][b][2] = min(dp[r][g][b-1][0] , dp[r][g][b-1][1]) + max(0 , r - cntr[posb[b]]) + max(0 , g - cntg[posb[b]]); } else dp[r][g][b][2] = INF; } } } int ans = INF; for(int i = 0; i < 3; i++) { ans = min(dp[posr.size() - 1][posg.size() - 1][posb.size() - 1][i] , ans); } cout << ans << '\n'; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); 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...