158B - Taxi

中文翻译:下课后,N组小学生走到外面,决定去波利卡普斯庆祝他的生日。 我们知道,第i组由Si朋友组成(1≤Si≤4),他们想一起去Polycarpus。 他们决定乘出租车去那里。 每辆车最多可载四名乘客。 如果每个小组的所有成员都乘坐同一辆出租车(但一辆出租车可以搭乘一组以上的出租车),那么孩子们需要的最小汽车数量是多少?

import sys
import math

n = int(sys.stdin.readline().strip())
nums = map(int, sys.stdin.readline().strip().split(" "))

places = {1: 0, 2: 0, 3: 0, 4: 0}

res = 0

for i in nums:
    places[i] += 1

res = places[4]

if places[3] > 0:
    res += places[3]

    if places[1] > 0:
        if places[3] >= places[1]:
            places[1] = 0
        else:
            places[1] = places[1] - places[3]

if places[2]>0:
    res+=places[2]/2
    places[2]-=places[2]/2*2

    if places[2]==1:
        res+=1

        if places[1]<=2:
            places[1]=0
        else:
            places[1]-=2

res+=int(math.ceil(places[1]/4.0))

print res

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值