Wannafly挑战赛15 B 车辆安排 [模拟]

题目描述 

有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;
}

猜你喜欢

转载自blog.csdn.net/weixin_39792252/article/details/80293265