概述
题目意思就是给你不同学生人数的组,要求一个组的人必须要在一辆车上,问你要几辆车,模拟一下
题目链接: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:y
using 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 %dn",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("%dn",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("%dn",sum);
}
return 0;
}
最后
以上就是整齐老虎为你收集整理的Codeforces-158B的全部内容,希望文章能够帮你解决Codeforces-158B所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复