链接:https://www.nowcoder.com/acm/contest/112/B
来源:牛客网
有n个队伍,每个队伍的人数小于等于5,每辆车最多坐5个人,要求一个队伍的人都在一辆车上,求最少的车数
输入描述:
第一行n
第二行n个数,表示每个队伍的人数
输出描述:
输出最少车数
示例1
输入
3
3 4 5
输出
3
备注:
n≤1e5
每个数小于等于5
思路:首先利用桶棑序,统计出队伍有1个人,2个人…..的有分别多少个·,然后5个人的一定是一堆一辆车,其他队伍拼车。
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
ll a[100010];
int main()
{
ll n;
while(scanf("%lld",&n)!=EOF)
{
ll x,ans,m;
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++)
{
scanf("%lld",&x);
a[x]++;
}
ans=a[5];
n=n-ans;
while(n)
{
ans++;
m=5;
for(int i=4;i>0;i--)
{
while(a[i]!=0&&m>=i)
{
a[i]--;
n--;
m=m-i;
}
}
}
printf("%lld\n",ans);
}
return 0;
}