首页 > 其他 > 详细

USACO Sorting a Three-Valued Sequence

时间:2015-03-07 13:50:08      阅读:220      评论:0      收藏:0      [点我收藏+]

 

题目大意:给你一个只有1 2 3 的序列,要你排序,每次可以交换任意两个元素,问最小交换次数是多少

思路:贪心,先排1 ,如果1已经在位置上了,那就不要动了,如果是2那就和最前面的1交换,如果是3,那就和后面的1交换

 

 

 1 /*{
 2 ID:a4298442
 3 PROB:sort3
 4 LANG:C++
 5 }
 6 */
 7 #include<iostream>
 8 #include<fstream>
 9 #define maxn 5000
10 using namespace std;
11 ifstream fin("sort3.in");
12 ofstream fout("sort3.out");
13 //#define fin cin
14 //#define fout cout
15 int a[maxn],listone[maxn];
16 int main()
17 {
18     int n,one=0,two=0,three=0,h=0,r=0,l=0,ans=0;
19     fin>>n;
20     for(int i=1;i<=n;i++)
21     {
22         fin>>a[i];
23         if(a[i]==1)one++,listone[++r]=i;
24         if(a[i]==2)two++;
25         if(a[i]==3)three++;
26     }
27     for(int i=1;i<=one;i++)if(a[i]==1)l++;
28     for(int i=1;i<=one;i++)
29     {
30         if(a[i]==1)continue;
31         else if(a[i]==2)
32         {
33             swap(a[i],a[listone[++l]]);
34             ans++;
35         }
36         else if(a[i]==3)
37         {
38             swap(a[i],a[listone[r--]]);
39             ans++;
40         }
41     }
42     for(int i=one+1;i<=one+two;i++)
43     {
44         if(a[i]==3)ans++;
45     }
46     fout<<ans<<endl;
47     return 0;
48 }

 

USACO Sorting a Three-Valued Sequence

原文:http://www.cnblogs.com/philippica/p/4320185.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!