Problem:
Score : 300 points

Problem Statement

A sequence a_1,a_2,... ,a_n is said to be /\/\/\/ when the following conditions are satisfied:

For each i = 1,2,..., n-2, a_i = a_{i+2}.

Exactly two different numbers appear in the sequence.

You are given a sequence v_1,v_2,...,v_n whose length is even.
We would like to make this sequence /\/\/\/ by replacing some of its elements.
Find the minimum number of elements that needs to be replaced.

Constraints

2 \leq n \leq 10^5

n is even.

1 \leq v_i \leq 10^5

v_i is an integer.

Input

Input is given from Standard Input in the following format:

n
v_1 v_2 ... v_n

Output

Print the minimum number of elements that needs to be replaced.

Sample Input 1

4
3 1 3 2

Sample Output 1

1

The sequence 3,1,3,2 is not /\/\/\/, but we can make it /\/\/\/ by replacing one of its elements: for example, replace the fourth element to make it 3,1,3,1.

Sample Input 2

6
105 119 105 119 105 119

Sample Output 2

0

The sequence 105,119,105,119,105,119 is /\/\/\/.

Sample Input 3

4
1 1 1 1

Sample Output 3

2

The elements of the sequence 1,1,1,1 are all the same, so it is not /\/\/\/.

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <bits/stdc++.h>
using namespace std;
typedef long long lint;
typedef pair<int,int> P;
const int    INF=(int)1e9;
const int    MOD=(int)1e9+7;
const double EPS=(double)1e-10;
struct Accelerate_Cin{
    Accelerate_Cin(){
        cin.tie(0); ios::sync_with_stdio(0); cout<<fixed<<setprecision(20);
    };
};



int main(){
  int n,v[100005],check1=0,check2=0;
  cin>>n;
  map<int,int>m1;
  map<int,int>m2;
  for(int t=1;t<=n;t++)cin>>v[t];
  for(int t=1;t<=n;t++){
    if(t%2==1){
      if(v[t]!=v[t+2]&&t+2<=n)check1++;
      m1[v[t]]++;
    }
    if(t%2==0){
      if(v[t]!=v[t+2]&&t+2<=n)check2++;
      m2[v[t]]++;
    }
  }

  if(check1==0&&check2==0){
    if(v[1]==v[2]){
      cout<<"2"<<"\n";
    }else{
      cout<<"0"<<"\n";
    }
    return 0;
  }

  int max1,max2;
  max1=max2=0;
  int m1key,m2key;
  for(int t=1;t<=n;t++){
    if(max1<m1[v[t]])max1=m1[v[t]],m1key=v[t];
    if(max2<m2[v[t]])max2=m2[v[t]],m2key=v[t];
  }

  int max12=0,max22=0;
  int m12key,m22key;
  m12key=m22key=-1;
  if(check1==0){
    for(int t=1;t<=n;t++){
      if(max22<m2[v[t]]&&v[t]!=m2key)max22=m2[v[t]],m22key=v[t];
    }
  }else if(check2==0){
    for(int t=1;t<=n;t++){
      if(max12<m1[v[t]]&&v[t]!=m1key)max12=m1[v[t]],m12key=v[t];
    }
  }else{
    for(int t=1;t<=n;t++){
      if(max12<m1[v[t]]&&v[t]!=m1key)max12=m1[v[t]],m12key=v[t];
      if(max22<m2[v[t]]&&v[t]!=m2key)max22=m2[v[t]],m22key=v[t];
    }
  }

  if(m1key==m2key){
    int ans;
    if(m12key==-1)ans=n/2-max22;
    if(m22key==-1)ans=n/2-max12;
    if(m12key!=-1&&m22key!=-1)ans=min(n-max1-max22,n-max2-max12);
    cout<<ans<<"\n";
  }else{
    if(m12key==-1){
      cout<<n/2-max2;
    }else if(m22key==-1){
      cout<<n/2-max1<<"\n";
    }else{
      cout<<n-max1-max2<<"\n";
    }
  }
  return 0;
}