题目描述
有n个队伍,每个队伍的人数小于等于5,每辆车最多坐5个人,要求一个队伍的人都在一辆车上,求最少的车数
输入描述:
第一行n 第二行n个数,表示每个队伍的人数
输出描述:
输出最少车数
示例1
输入
3 3 4 5
输出
3
备注:
n≤1e5 每个数小于等于5
题目就是模拟,我也不知道我菜成酱紫!!!
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+7;
int n, k, ans = 0, a[6];
void solve()
{
ans += a[5];
for(int i = 1; i <= 2; i++)
{
int x = i, y = 5 - i, z = min(a[x], a[y]);
ans += z; a[x] -= z; a[y] -= z;
}
ans += a[4];
if(a[3] != 0) {
ans += a[3];
if(a[1] >= 2*a[3]) {
a[1] -= 2*a[3];
ans += (a[1]+4)/5;
}
} else {
if(a[1] >= a[2]/2) {
ans += a[2]/2;
a[1] -= a[2]/2;
a[2] %= 2;
if(a[2] == 0) ans += (a[1]+4)/5;
else {
ans++;
a[1]-=3;
if(a[1] > 0) ans += (a[1]+4)/5;
}
} else {
ans += (a[2]+1)/2;
}
}
}
int main()
{
while(~scanf("%d",&n))
{
ans = 0; memset(a, 0, sizeof(a));
while(n--) {
scanf("%d", &k);
a[k]++;
}
solve();
printf("%d\n",ans);
}
return 0;
}