Codeforces-158B

来源:互联网 发布:jsp页面显示数据库表 编辑:程序博客网 时间:2024/06/03 13:47

题目意思就是给你不同学生人数的组,要求一个组的人必须要在一辆车上,问你要几辆车,模拟一下

题目链接:http://codeforces.com/problemset/problem/158/B

AC代码:

#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#define MIN(x,y) x<y?x:y#define MAX(x,y) x>y?x:yusing namespace std;const int N=110000;int a[N];bool cmp(int x,int y){return x>y;}int main(){int i,j,n,sum,p,pos,four,three,two,one;while(~scanf("%d",&n)){sum=0;four=0;three=0;two=0;one=0;pos=0;for(i=0;i<n;i++){scanf("%d",&a[i]);if(a[i]==1)one++;if(a[i]==2)two++;if(a[i]==3)three++;if(a[i]==4)four++;}//printf("%d %d %d %d\n",one,two,three,four);sum+=four;if(one<three){sum+=one;three=three-one;sum+=three;if(two%2==0){sum+=(two/2);}else{sum+=(two/2+1);}}else if(three<one){if(three!=0){sum+=three;one=one-three;}if(one<two){if(one%2==0){one=one/2;two+=one;if(two%2==0){sum+=two/2;}else{sum+=(two/2+1);}}else{one=one/2;two+=one;if(two%2==0){sum+=two/2+1;}else{sum+=(two/2+1);}}}else if(one>two){if(one%2==0){one=one/2;two+=one;if(two%2==0){sum+=two/2;}else{sum+=(two/2+1);}//printf("%d\n",sum);}else{one=one/2;two+=one;if(two%2==0){sum+=two/2+1;}else{sum+=(two/2+1);}}}else if(one==two){sum+=one;}}else if(three==one){sum+=one;if(two%2==0){sum+=(two/2);}else{sum+=(two/2+1);}}printf("%d\n",sum);}return 0;}


原创粉丝点击