Submission #1237286

#TimeUsernameProblemLanguageResultExecution timeMemory
1237286nasjesGrowing Vegetable is Fun 3 (JOI19_ho_t3)C++20
15 / 100
0 ms328 KiB
#include <iostream>
#include <iomanip>
#include <vector>
#include <cmath>
#include <algorithm>
#include <set>
#include <queue>
#include <map>
#include <stack>
#include <bitset>
#include <string>
#include <cstring>
#include <iterator>
#include <random>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pll;
typedef long double ld;
const ll dim = 5*1e3+7;
//const ll mod = 1e9 + 7;
const ll inf = 1e18 + 77;
#define endl "\n"
#define fi first
#define pb push_back
#define se second
#define vll vector<ll>

ll n, m;
pll a[dim];
ll b[dim];
ll check(string &s){
    ll fl=1;
    for(int j=1; j<s.length(); j++){
        if(s[j]==s[j-1])fl=0;
    }
    return fl;

}

int main() {
    ll k, t, u0, v0;
    string s;
    cin>>n;
    cin>>s;
    string s1=s;
    ll cnt1=0;
    ll cnt2=0;
    ll cnt3=0;
    for(int i=1; i<=n; i++){
        if(s[i-1]=='G')cnt1++;
        else if(s[i-1]=='R')cnt2++;
        else cnt3++;
    }
    if(cnt1>(n+1)/2 || cnt2>(n+1)/2 || cnt3>(n+1)/2){
        cout<<-1<<endl;
        return 0;
    }

    ll ans=0;
    for(int i=1; i<n; i++){
        if(s[i]==s[i-1]){
            for(int j=i+1; j<n; j++){
                if(s[j]!=s[i]){
                    ans+=abs(j-i);
                    swap(s[j], s[i]);
                    break;
                }
            }
        }
    }
    ll ans1=inf;
    if(check(s))ans1=ans;
    s=s1;
    ans=0;

    for(int i=1; i<n; i++){
        if(s[i]!=s[0]){
            s=string(1, s[i])+s.substr(0, i)+s.substr(i+1, n-i+1);
            ans+=i;
            break;
        }
    }
    for(int i=1; i<n; i++){
        if(s[i]==s[i-1]){
            for(int j=i+1; j<n; j++){
                if(s[j]!=s[i]){
                    ans+=abs(j-i);
                    swap(s[j], s[i]);
                    break;
                }
            }
        }
    }
    if(check(s))ans1=min(ans1, ans);
    if(ans1==inf){
        cout<<-1<<endl;
    }
    else{
        cout<<ans1<<endl;
    }
 //   cout<<s<<endl;


    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...