158B - Taxi

158B - Taxi_第1张图片

中文翻译:下课后,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

 

你可能感兴趣的:(编程题)