Problem:S10的春游出行计划
Description:
计算机学院辅导员要求S10策划一次春游活动
学院有n个同学,被分成m个小组,每个小组的人数不超过4人。
现在有一种汽车,每辆车最多坐4人,可以不坐满,要求同一小组的同学必须坐在同一辆车上,而一辆车可以载上来自多个不同小组的同学。
问最少需要多少辆车,能够满足这次的春游计划。
Input:
多组数据,第一行给出数据组数T(1≤T≤5000)
每组数据首先给出两个整数n和m (1≤n,m≤1e5)
随后一行有m个整数,a1,a2,a3…am表示每个小组的人数。(1≤ai≤4)
Output:
每一组数据输出一个整数,表示春游出行最少需要的车辆
Sample Input:
2
10 4
1 2 3 4
7 4
1 2 2 2
Sample Output:
3
2
Language:C++
#include <iostream>
using namespace std;
const int N=100010;
int main()
{
int T;
cin>>T;
while(T--)
{
int n,m;
cin>>n>>m;
int a[N];
int one=0,two=0,three=0,four=0;
for(int i=1;i<=m;i++)
{
cin>>a[i];
if(a[i]==1) one++;
if(a[i]==2) two++;
if(a[i]==3) three++;
if(a[i]==4) four++;
}
int car;
if(three)
{
if(one<=three) car=two+three+four;
else
{
if((one-three+1)/2<=two) car=two+three+four;
else car=(one-three-two*2+3)/4+two+three+four;
}
}
else
{
if(two%2) car=(one-2+3)/4+(two/2+1)+three+four;
else car=(one+3)/4+two/2+three+four;
}
cout<<car<<'\n';
}
return 0;
}