제출 #1342210

#제출 시각아이디문제언어결과실행 시간메모리
1342210NipphitchGrowing Vegetable is Fun 3 (JOI19_ho_t3)C++20
5 / 100
1106 ms265324 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long 
const int N=405;

int n,cntr,cntg,cnty;
vector <char> st;
map <vector <char>,int> dp;
queue <pair <int,vector <char>>> q;

signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n;
    for(int i=1;i<=n;i++){
        char c;
        cin >> c;
        st.push_back(c);
        if(c=='R') cntr++;
        else if(c=='G') cntg++;
        else cnty++;
    }
    if(cnty>(n+1)/2 || cntr>(n+1)/2 || cntg>(n+1)/2){
        cout << "-1";
        exit(0);
    }
    q.push({0,st});
    while(!q.empty()){
        auto [d_u,u]=q.front();
        q.pop();
        bool ok=true;
        for(int i=0;i<n;i++){
            if(i+1<n && u[i]==u[i+1]){
                ok=false;
                break;
            }
            if(i-1>0 && u[i]==u[i-1]){
                ok=false;
                break;
            }
        }
        if(ok){
            cout << d_u;
            exit(0);
        }
        if(dp.find(u)!=dp.end()) continue;
        dp[u]=1;
        for(int i=0;i+1<n;i++){
            if(u[i]==u[i+1]) continue;
            swap(u[i],u[i+1]);
            if(dp.find(u)==dp.end()) q.push({d_u+1,u});
            swap(u[i],u[i+1]);
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...