Submission #1317808

#TimeUsernameProblemLanguageResultExecution timeMemory
1317808vtnooGrowing Vegetable is Fun 3 (JOI19_ho_t3)C++20
0 / 100
0 ms332 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...