#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 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... |