题目网址
题目解析
参考博客
代码
#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
#include<math.h>
using namespace std;
int n,a[100005];
long long sum,s1,s2,s3;main()
{cin>>n;for(int i=1;i<=n;i++){cin>>a[i];if(a[i]==1) s1++;//统计每组人数,4人组存在时答案直接+1 if(a[i]==2) s2++;if(a[i]==3) s3++;if(a[i]==4) sum++;}sum=sum+min(s1,s3)+s2/2;s2=s2%2;//2人组组数变更 ,非0即1 if(s3>s1)sum=sum+s2+s3-s1;//剩余的3人组每组单独一辆车,加上2人组 是否有余 else if(s1>s3){s1=s1-s3; //1人组 组数变更 if(s2==0){sum=sum+s1/4;if(s1%4!=0)sum=sum+1;}else{if(s1<=2)sum=sum+1;//余下的1人组小于2,和余下的2人组一辆车 else{sum=sum+1+(s1-2)/4;if((s1-2)%4!=0)sum=sum+1;}}}else sum=sum+s2;//1人组和3人组人数相同,直接加上剩下二人组的一或零辆车 cout<<sum;
}