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 (GCC 5.4.1) (judge verdict: Accepted)

#include <stdio.h>

int main(void){
	int n;
	int i,j;
	int a[100001]={};
	int b[100001]={};
	int anum=0,bnum=0;
	int temp;
	int a1=0,a2=0,b1=0,b2=0;
	scanf("%d",&n);
	//配列の添字に数字の数を対応付けるという戦略
	//a[1]は1の数
	for(i=0;i<n;i++){
		if(i%2==0){
			scanf("%d",&temp);
			a[temp]++;
		}else{
			scanf("%d",&temp);
			b[temp]++;
		}
	}
	for(i=0;i<100001;i++){
		//a[]の中で1番めと2番めの添字を探す
		//a1は1番出現数が多い数でa2は2番目に出現数の多い数
		//a[a1]はa1がa[a1]回出現したことを意味する
		if( a[a1]< a[i]){
			a2 = a1;
			a1 = i;
		}else if ( a[a2]<a[i]){
			a2 = i;
		}
		if( b[b1]< b[i]){
			b2 = b1;
			b1 = i;
		}else if ( b[b2]<b[i]){
			b2 = i;
		}
	}
	//printf("%d %d %d %d",a1,a2,b1,b2);
	//最後にansを出力する
	//a1!=b1だったら ans = n - (a1)-(b1);
	//a1==b1だったら a1+b2 と a2+b1の大きいほうを採用して
	//ans = n - 大きい方
	int ans;
	int big = a[a1] + b[b2];
	if ( big < a[a2]+b[b1]){
		big = a[a2]+b[b1];
	}
	if( a1!=b1){
		ans = n-(a[a1])-(b[b1]);
	}else{
		ans = n - big;
	}
	printf("%d",ans);
	return 0;
}