CF158B - Taxi

题目链接

题目大意
一些人打车,那些人分组,每个组有1或2或3或4人,但是一个车这能装下四个人,求。。至少几辆车啊
解题思路
四人组一辆车,两个两人组一辆车,一个三人组加一个一人组一辆车,大体是这样,其实这个题不难,就是太他妈绕了啊喂,先判断两人组吧,如果有偶数个两人组,那就好办了,但是如果有奇数个两人组,那就先把多出来的那两个人放一边
再看三人组和一人组,有两种情况,(1)三人组的个数大于等于一人组,这种情况下,会剩下几组三人组,那就每组坐一个车,剩下的二人组坐一个车。(2)三人组的个数小于一人组,这种情况下,会剩下几个一人组,,,然后就统计那些一人组的人数加上那两个人,,如果统计的人数模4等于0,车的个数就是它除4,否则,就是先除四,再加一

代码如下

#include<stdio.h>
int main()
{
 long long n,a=0,b=0,c=0,sum=0,x1,x2,x3,y;
 int m[100010],i;
 scanf("%lld",&n);
 for(i=0;i<n;i++)
    scanf("%d",&m[i]);
 for(i=0;i<n;i++)
 {
  if(m[i]==1)
     a++;
  if(m[i]==2)
     b++;
  if(m[i]==3)
     c++;
  if(m[i]==4)
     sum++; 
 }
 if(b%2==1)
    x2=1;
 else
    x2=0;
 sum+=(b/2);
    if(c>=a)
    {
     sum+=a;
     x3=c-a;
     x1=0;
     sum=sum+x2+x3;
    }
    else
    {
     sum+=c;
     x1=a-c;
     x3=0;
     y=(2*x2)+x1;
     if(y%4==0)
        sum=sum+(y/4);
     else
        sum=sum+(y/4)+1;
     
    }
    printf("%lld\n",sum);
 return 0;
}

啊啊啊啊啊啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值