USACO-Section2.1 Sorting a Three-Valued Sequence[排序]
2017-07-14 23:43
597 查看
2017-7-14
互换完后,剩下的数是三个数刚好形成环形的(你懂我意思吧.jpg)一个环需要2次交换才能都回到位置上。因为这个时候已经不能直接互换了,所以环的个数,其实也就是还有几个1不在自己位置上。两部分次数加起来。
题目
一串由1,2,3组成的数字,用交换的方法从小到大排序,问最少交换次数。题解
我用了一个表,把队列分3块吧,每个数有它应该在的位置,s[i][j]=n表示数字i有n个在数字j的位置上。那么i=j的就是已经在位置上了,ij互换的比如说s12和s21,取其中小的一个,表示两个数互换一次就能两个都到位。相同地s13和s31,s23和s32都是这么操作。互换完后,剩下的数是三个数刚好形成环形的(你懂我意思吧.jpg)一个环需要2次交换才能都回到位置上。因为这个时候已经不能直接互换了,所以环的个数,其实也就是还有几个1不在自己位置上。两部分次数加起来。
代码
/* ID: xcwhkh1 LANG: C++ TASK: sort3 */ #include <stdio.h> #include <algorithm> #include <string.h> using namespace std; int main(){ FILE *fin=fopen("sort3.in","r"); FILE *fout=fopen("sort3.out","w"); int n; int a1=0,a2=0,a3=0; int a[1001]; int s[4][4]; int sum=0; memset(s,0,sizeof(s)); fscanf(fin,"%d",&n); for(int i=1;i<=n;i++) { fscanf(fin,"%d",&a[i]); if(a[i]==1) a1++; if(a[i]==2) a2++; } for(int i=1;i<=n;i++) { if(i<=a1) s[a[i]][1]++; else if(i<=a1+a2) s[a[i]][2]++; else s[a[i]][3]++; } sum=min(s[1][2],s[2][1])+min(s[1][3],s[3][1])+min(s[3][2],s[2][3]); sum=sum+2*(s[1][2]-min(s[1][2],s[2][1])+s[1][3]-min(s[1][3],s[3][1])); fprintf(fout,"%d\n",sum); return 0; }
相关文章推荐
- USACO-Section2.1 Sorting a Three-Valued Sequence(排序)
- USACO-Section2.1 Sorting a Three-Valued Sequence [其他][排序][交换]
- USACO Section2.1 Sorting a Three-Valued Sequence 解题报告
- USACO-Section2.1 Sorting a Three-Valued Sequence【数学公式】
- USACO - Chapter2 Section 2.1 - Sorting a Three-Valued Sequence
- USACO-Section 2.1 Sorting a Three-Valued Sequence (贪心)
- USACO2.1 三值的排序 Sorting a Three-Valued Sequence
- USACO Section 2.1: Prob Sorting A Three-Valued Sequence
- [USACO2.1]三值的排序 Sorting a Three-Valued Sequence
- USACO 2.1-Sorting a Three-Valued Sequence
- USACO 2.1 Sorting a Three-Valued Sequence (乱搞)
- USACO [2.1] Sorting a Three-Valued Sequence
- USACO 2.1 Sorting a Three-Valued Sequence
- USACO 2.1 Sorting A Three-Valued Sequence (sort3)
- usaco三值的排序 Sorting a Three-Valued Sequence
- USACO 2.1 Sorting A Three-Valued Sequence
- USACO 2.1.3 Sorting a Three-Valued Sequence 三值的排序
- USACO:2.1.3 Sorting a Three-Valued Sequence 三值的排序
- USACO 2.1 Sorting a Three-Valued Sequence
- Section 2.1 Sorting A Three-Valued Sequence