车辆安排
链接:https://www.nowcoder.com/acm/contest/112/B
来源:牛客网
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
有n个队伍,每个队伍的人数小于等于5,每辆车最多坐5个人,要求一个队伍的人都在一辆车上,求最少的车数
输入描述:
第一行n 第二行n个数,表示每个队伍的人数
输出描述:
输出最少车数
示例1
输入
3 3 4 5
输出
3
备注:
n≤1e5 每个数小于等于5
尽量把5填满,剩下的另外考虑-
#include<stdio.h>
#define N 10
int a[N];
int main()
{
int n,i,number,ans=0,t;
scanf("%d",&n);
while(n--)
{
scanf("%d",&number);
a[number]++;
}
ans+=a[5];
if(a[1]>a[4])
t=a[4];
else
t=a[1];
ans+=t;
a[1]-=t;
a[4]-=t;
if(a[2]>a[3])
t=a[3];
else
t=a[2];
ans+=t;
a[2]-=t;
a[3]-=t;
if(a[1]&&a[3])
{
ans+=a[3];
a[1]-=a[3]*2;
if(a[1]>0)
{
a[1]=(a[1]+4)/5;
ans+=a[1];
}
a[1]=0;
a[3]=0;
}
else if(a[1]&&a[2])
{
if(a[2]%2==0)
{
a[2]=a[2]/2;
a[1]-=a[2];
ans+=a[2];
if(a[1]>0)
{
a[1]=(a[1]+4)/5;
ans+=a[1];
}
}
else{
a[2]=a[2]/2+1;
a[1]-=2;
a[1]-=a[2];
ans+=a[2];
if(a[1]>0)
{
a[1]=(a[1]+4)/5;
ans+=a[1];
}
}
}
else if(a[2]&&a[4])
{
ans+=a[4];
a[2]=(a[2]+1)/2;
ans+=a[2];
}
else if(a[3]&&a[4])
{
ans+=a[3]+a[4];
}
else if(a[1])
{
a[1]=(a[1]+4)/5;
ans+=a[1];
}
else if(a[2])
{
a[2]=(a[2]+1)/2;
ans+=a[2];
}
else if(a[3])
{
ans+=a[3];
}
else if(a[4])
{
ans+=a[4];
}
printf("%d\n",ans);
}