#include <bits/stdc++.h>
#define ll long long
#define all(x) x.begin(), x.end()
#define ii pair<ll,ll>
#define fst first
#define snd second
#define sz(x) (int)x.size()
#define pb push_back
using namespace std;
const int MAXN=405;
int fen[MAXN];
int que(int x){
int v=0;
for(;x;x-=x&-x){
v+=fen[x];
}
return v;
}
void upd(int x,int v){
for(;x<MAXN;x+=x&-x){
fen[x]+=v;
}
}
int main(){
int n;cin>>n;
string s;cin>>s;
// si tengo una secuencia de 10001101..
// entonces mi respuesta debería ser 101010101...
multiset<int>red,green;
for(int i=0;i<n;i++){
if(s[i]=='G'){
green.insert(i);
}else red.insert(i);
}
char act=s[0];
if(act=='R')red.erase(red.begin());
else green.erase(green.begin());
int ans=0,i=1;
while(i<n){
act=(act=='R'?'G':'R');
if(s[i]!=act){
if(s[i]=='R'){
if(!sz(green)){
cout<<-1<<endl;
return 0;
}
ans+=*green.begin()-i;
green.erase(green.begin());
act=(act=='R'?'G':'R');
i+=2;
}else{
if(!sz(red)){
cout<<-1<<endl;
return 0;
}
ans+=*red.begin()-i;
red.erase(red.begin());
act=(act=='R'?'G':'R');
i+=2;
}
}
else{
if(act=='R')red.erase(red.begin());
else green.erase(green.begin());
}
i++;
}
cout<<ans<<endl;
}
| # | 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... |