| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1332532 | retarde | Growing Vegetable is Fun 3 (JOI19_ho_t3) | C++20 | 0 ms | 344 KiB |
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define pf push_front
#define mp make_pair
#define fi first
#define se second
#define int long long
#define all(x) (x).begin(), (x).end()
typedef long double ld;
typedef long long ll;
typedef pair<ll,ll> pll;
typedef pair<int,int> pii;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<bool> vb;
typedef vector<vector<int>> vvi;
typedef vector<vector<bool>> vvb;
typedef vector<vector<ll>> vvll;
typedef vector<string> vs;
typedef vector<vector<string>> vvs;
typedef vector<char> vc;
typedef vector<vector<char>> vvc;
typedef map<int, int> mii;
typedef unordered_map<int, int> umii;
const int mod = 1e9 + 7;
const int inf = INTMAX_MAX;
const bool tc = false;
int solve2(string &s) {
int n = s.size();
set<int> active;
set<int> r, g; for (int i = 0; i < n; i++) {
if (s[i] == 'R') r.insert(i);
if (s[i] == 'G') g.insert(i);
active.insert(i);
}
int ans = 0;
for (int i = 0; i < n; i++) {
if (active.find(i) == active.end()) continue;
active.erase(i);
if (!active.size()) break;
// cout << i + 1 << " " << s[i] << " " << *active.begin() + 1 << " " << s[*active.begin()] << '\n';
if (s[i] != s[*active.begin()]) {
if (s[i] == 'R') r.erase(i);
else g.erase(i);
continue;
}
if (s[i] == 'R') {
if (!g.size()) {
return -1;
}
auto x = *g.begin();
ans += x - i - 1;
g.erase(x);
active.erase(x);
} else {
if (!r.size()) {
return -1;
}
auto x = *r.begin();
ans += x - i - 1;
r.erase(x);
active.erase(x);
}
g.erase(i); r.erase(i);
}
return ans;
}
inline void solve() {
int n; cin >> n; string s; cin >> s;
int a = solve2(s);
int x = 0; for (int i = 0; i < n; i++) {
if (s[i] != s[0]) {
x = i;
string s2; s2+= s[i]; for (int j = 0; j < i; j++) s2.pb(s[j]);
for (int j = i + 1; j < n; j++) s2.pb(s[j]);
// cout << s2.size() << "scyeah\n";
s = s2;
break;
}
}
int b = solve2(s);
if (a == -1 && b == -1) {cout << "-1\n"; return;}
if (a == -1) {cout << b+x << '\n'; return;}
if (b == -1) {cout << a << '\n'; return;}
cout << min(a, b+x) << '\n';
}
void setIO(string s) {
freopen((s + ".in").c_str(), "r", stdin);
freopen((s + ".out").c_str(), "w", stdout);
}
signed main() {
ios::sync_with_stdio(false);
cout.tie(0);
cin.tie(0);
//setIO();
int t = 1;
if (tc) {
cin >> t;
}
while (t--) {
solve();
}
}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... | ||||
