# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
97400 | kdh9949 | Growing Vegetable is Fun 3 (JOI19_ho_t3) | C++17 | 2 ms | 384 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
const int N = 405, INF = int(1e9);
int n, tt[3], s[6][N], p[3][N], d[N][N][N][3];
char b[N];
int main(){
scanf("%d%s", &n, b + 1);
for(int i = 1; i <= n; i++){
for(int j = 0; j < 6; j++) s[j][i] = s[j][i - 1];
int t = (b[i] == 'R' ? 0 : b[i] == 'G' ? 1 : 2);
s[t][i]++;
s[t + 3][i]++;
p[t][tt[t]++] = i;
}
for(int r = tt[0]; r >= 0; r--){
for(int g = tt[1]; g >= 0; g--){
for(int y = tt[2]; y >= 0; y--){
for(int l = 0; l < 3; l++){
int &ret = d[r][g][y][l];
if(r + g + y == n){ ret = 0; continue; }
ret = INF;
int a[5] = {r, g, y, r, g};
for(int i = 0; i < 3; i++){
if(i == l) continue;
if(a[i] + 1 > tt[i]) continue;
ret = min(ret,
d[r + (i == 0)][g + (i == 1)][y + (i == 2)][i]
+ max(0, s[i + 1][p[i][a[i]]] - a[i + 1])
+ max(0, s[i + 2][p[i][a[i]]] - a[i + 2]));
}
}
}
}
}
int r = min({d[1][0][0][0] + p[0][0] - 1,
d[0][1][0][1] + p[1][0] - 1,
d[0][0][1][2] + p[2][0] - 1});
if(r > INF / 2) puts("-1");
else printf("%d\n", r);
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |