题目描述:
部门组织绿道骑行团建活动。租用公共双人自行车骑行,每辆自行车最多坐两人、做大载重M。
给出部门每个人的体重,请问最多需要租用多少双人自行车。
输入描述:
第一行两个数字m、n,自行车限重m,代表部门总人数n。
第二行,n个数字,代表每个人的体重。体重都小于等于自行车限重m。
0 < m <= 200
0 < n <= 1000000
输出描述:
最小需要的双人自行车数量。
示例1
输入:
3 4
3 2 2 1
输出:
3
解题思路:
把部门所有人按照体重降序排列,双指针。
如果最重的人+最轻的人的体重超过了自行车限重,那么最重的人只能自己骑一辆车。左指针指向次重的人,如果次重的人(剩下的人中最重的人)+最轻的人的体重没超过限重,那么这两个人合骑一辆,左右指针都向中间移动一格,以此循环就行了
#华为机试,emo了#
m,n=map(int,input().split())
peoples=sorted(list(map(int,input().split())),reverse=True)
pang=0
shou=n-1
count=0
last=m
while last>0:
if last==1:
count+=1
last-=1
else:
if peoples[pang]+peoples[shou]<=m:
pang+=1
shou-=1
count+=1
last-=2
else:
pang+=1
count+=1
last-=1
print(count)