题意
使偶数个数经过min次替换后,变为abab的形式(a != b)
题解
把奇数位和偶数位拆开来,把数字出现个数排序
1° 若奇数位次数最多的数 != 偶数位次数最多的数,ans = n - _1[1].cnt - _2[1].cnt
2° 若相同,ans = n - max(_1[1].cnt + _2[2].cnt, _1[2].cnt + _2[1].cnt)
调试记录
对两个相同的数取max?
#include <cstdio>
#include <functional>
#include <algorithm>
#define maxn 100005
using namespace std;
struct node{
int cnt, link;
}_1[maxn], _2[maxn];
bool cmp(const node &a, const node &b){return a.cnt > b.cnt;}
int n;
int main(){
scanf("%d", &n);
for (int x, i = 1; i <= n; i++){
scanf("%d", &x);
if (i & 1) _1[x].cnt++, _1[x].link = x;
else _2[x].cnt++, _2[x].link = x;
}
sort(_1 + 1, _1 + 100000 + 1, cmp);
sort(_2 + 1, _2 + 100000 + 1, cmp);
if (_1[1].link != _2[1].link) printf("%d\n", n - _1[1].cnt - _2[1].cnt);
else printf("%d\n", n - max(_1[1].cnt + _2[2].cnt, _1[2].cnt + _2[1].cnt));
return 0;
}