/*
ID :
LANG: C++11
TASK: sort3
*/
#include <iostream>
#include <algorithm>
using namespace std;
int N;
int main()
{
freopen("sort3.in", "r", stdin);
freopen("sort3.out", "w", stdout);
int a[1050] = {};
int count[4] = {};
cin >> N;
for (int i = 0; i < N; i ++){
scanf("%d", &a[i]);
count[a[i]] ++;
}
int b[4][4] = {};
for (int i = 0; i < count[1]; i ++){
b[1][a[i]] ++;
}
for (int i = count[1]; i < count[1] + count[2]; i++){
b[2][a[i]] ++;
}
for (int i = count[1] + count[2]; i < N; i ++){
b[3][a[i]] ++;
}
int ans;
int t13 = min(b[1][3], b[3][1]);
int t12 = min(b[1][2], b[2][1]);
int t23 = min(b[2][3], b[3][2]);
ans = t12 + t13 + t23;
b[1][2] -= t12; b[2][1] -= t12;
b[1][3] -= t13; b[3][1] -= t13;
b[2][3] -= t23; b[3][2] -= t23;
int transCount = 0;
transCount = (b[1][2] != 0) + (b[2][1] != 0) + (b[1][3] != 0) + (b[3][1] != 0) + (b[2][3] != 0) + (b[3][2] != 0);
transCount -= 1;
if (transCount > 0){
ans += max(max(b[1][2], b[1][3]), max(b[2][3], b[2][1])) * transCount;
}
cout << ans << endl;
return 0;
}【USACO】Sorting a Three-Valued Sequence
最新推荐文章于 2021-01-07 17:39:40 发布
本文介绍了一个基于C++的排序算法优化案例,通过分析不同数值分布情况下的数组,采取了特定策略减少不必要的元素交换次数,从而提高排序效率。
1537

被折叠的 条评论
为什么被折叠?



