题目描述
有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; }