2.1.3
2016-03-25 16:00
204 查看
/* ID:18861501 LANG:C++ TASK:sort3 */ /*------------------Header Files------------------*/ #include <iostream> #include <cstring> #include <string> #include <cstdio> #include <algorithm> #include <cstdlib> #include <ctype.h> #include <cmath> #include <stack> #include <queue> #include <map> #include <vector> #include <limits.h> using namespace std; /*------------------Definitions-------------------*/ #define LL long long #define PI acos(-1.0) #define INF 0x3F3F3F3F /*---------------------Work-----------------------*/ int N,cnt1=0,cnt2=0,cnt3=0; int num[1500]; void work() { scanf("%d",&N); for(int i=1;i<=N;i++) { scanf("%d",&num[i]); if(num[i]==1) cnt1++; if(num[i]==2) cnt2++; if(num[i]==3) cnt3++; } int a=cnt1,b=cnt1+cnt2,c=cnt1+cnt2+cnt3; int cnt=0; for(int i=1;i<=a;i++) //把一次性替换的剔除掉 { if(num[i]==2) { for(int j=a+1;j<=b;j++) if(num[j]==1) { num[i]=1,num[j]=2; cnt++; break; } } else if(num[i]==3) { for(int j=b+1;j<=c;j++) if(num[j]==1) { num[i]=1;num[j]=3; cnt++; break; } } } for(int i=a+1;i<=b;i++) { if(num[i]==3) { for(int j=b+1;j<=c;j++) if(num[j]==2) { num[i]=2,num[j]=3; cnt++; break; } } } for(int i=1;i<=a;i++) //把需要两次的剔除,只有两种情况:3 1 2和2 3 1 if(num[i]!=1) { cnt+=2; //注意这里要重复计算多组的比如多个3 1 2, //但不可能两种皆有,因为会被前面直接剔除 } cout<<cnt<<endl; } /*------------------Main Function------------------*/ int main() { //freopen("test.txt","r",stdin); freopen("sort3.out","w",stdout); freopen("sort3.in","r",stdin); work(); return 0; }
相关文章推荐
- linux下使用select实现精确定时器
- C#中的线程一(委托中的异步)
- 线性期望(BUPT2015校赛.F)
- DEV C++ "把着手教" 单步调试(debug)
- 关于mybatis扩展的一点想法
- org.hibernate.QueryException: Expected positional parameter count: 2, actual parameters: [] [SELECT
- Android 编译环境搭建
- smarty模板引擎_2-变量的使用
- 俄罗斯方块c++
- C语言指针与数组易混淆知识点(一)
- html5学习笔记——canvas(二)
- Java中由substring方法引发的内存泄漏
- 5. Smarty3:默认的变量调解器
- 1.5.3
- 2.1.1(extra)
- 第四周项目(5)-递归求奇数积
- 实验一、命令解释程序的编写实验
- C#微信公众平台开发—高级群发接口
- C#比较dynamic和Dictionary性能
- k-Means算法Matlab实现