Shape Sort

 

#include <bits/stdc++.h>
#define M 100005

using namespace std;

int n,ans=1e9,A[M],B[M],cnt[4],seq[4],ck[4];

void input(){
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>A[i];
        cnt[A[i]]++;
    }
}

int val(){
    int c=0,pos[4][4]={{0}},cnt1=0,cnt2=0;
    for(int i=1;i<=3;i++){
        for(int j=0;j<cnt[seq[i]];j++){
            B[c++]=seq[i];
        }
    }
    for(int i=0;i<n;i++){
        pos[B[i]][A[i]]++;
    }
    for(int i=1;i<3;i++){
        for(int j=i+1;j<=3;j++){
            c=min(pos[i][j],pos[j][i]);
            cnt1+=c;
            cnt2+=pos[i][j]+pos[j][i]-c*2;
        }
    }
    return cnt1+cnt2/3*2;
}

void pro(int a){
    if(a>3){
        ans=min(ans,val());
        return;
    }
    for(int i=1;i<=3;i++){
        if(ck[i]) continue;
        ck[i]=1;
        seq[a]=i;
        pro(a+1);
        ck[i]=0;
    }
}

int main(){
    cin.tie(0);
    ios::sync_with_stdio(0);
    //freopen("in.txt","r",stdin);
    input();
    pro(1);
    cout<<ans<<endl;
    return 0;
}


Comments