#include <bits/stdc++.h>
using namespace std;
#define N 401
const int inf = 1e9;
int n, a[3], ans = inf, m, dp[401][401][401][3], pr[N][4];
vector <int> P[3];
string s;
int main() {
ios::sync_with_stdio(0);cin.tie(0);
cin >> n >> s;
bool ok = 0;
for(int i = 0; i < n; i++) {
int c = 0;
if(s[i] == 'R') c = 1;
if(s[i] == 'Y') c = 2;
a[c]++;
P[c].push_back(i);
if(a[c] > (n + 1) / 2) ok = 1;
for(int j = 0; j < 3; j++) {
if(i)pr[i][j] += pr[i - 1][j];
if(c == j) pr[i][j]++;
}
}
if(ok) return cout << "-1\n", 0;
for(int i = 0; i <= n; i++) {
for(int j = 0; j <= n; j++) {
for(int k = 0; k <= n; k++) {
for(int z = 0; z <= 2; z++) {
dp[i][j][k][z] = inf;
}
}
}
}
dp[0][0][0][1] = dp[0][0][0][0] = dp[0][0][0][2] = 0;
for(int i = 0; i <= a[0]; i++) {
for(int j = 0; j <= a[1]; j++) {
for(int k = 0; k <= a[2]; k++) {
for(int z = 0; z <= 2; z++) {
if(dp[i][j][k][z] == inf) continue;
for(int p = 0; p <= 2; p++) {
if(p == z) continue;
int nwi = i + (p == 0);
int nwj = j + (p == 1);
int nwk = k + (p == 2);
if(nwi > a[0]) continue;
if(nwj > a[1]) continue;
if(nwk > a[2]) continue;
int pos = -1, x1 = 0, x2 = 0;
if(p == 0) {
pos = P[p][i];
x1 = max(0, pr[pos][1] - j);
x2 = max(0, pr[pos][2] - k);
}
if(p == 1) {
pos = P[p][j];
x1 = max(0, pr[pos][0] - i);
x2 = max(0, pr[pos][2] - k);
}
if(p == 2) {
pos = P[p][k];
x1 = max(0, pr[pos][0] - i);
x2 = max(0, pr[pos][1] - j);
}
dp[nwi][nwj][nwk][p] = min(dp[nwi][nwj][nwk][p],dp[i][j][k][z] + x1 + x2);
}
}
}
}
}
for(int i = 0; i <= 2; i++) {
ans = min(ans,dp[a[0]][a[1]][a[2]][i]);
}
cout << ans << endl;
return 0;
}
| # | 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... |