- 题目
- 输入描述:
- 输出描述:
- 示例 1
- 示例 2
- 示例 3
- 个人解法
- 总结
题目
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
用数组代表每个人的能力,一个比赛活动要求参赛团队的最低能力值为N,每个团队可以由
1人或者2人组成,且1个人只能参加1个团队,请计算出最多可以派出多少支符合要求的团队
5
3 1 5 7 9
8
第一行数组代表总人数,范围[1,500000]
第二行数组代表每个人的能力,每个元素的取值范围[1, 500000],数组的大小范围[1,500000]
第三行数值为团队要求的最低能力值,范围[1, 500000]
3
最多可以派出的团队数量
输入:
5
3 1 5 7 9
8
输出:
3
说明
3,5组成一队,1,7组成一队,9自己一个队,故输出3
输入:
7
3 1 5 7 9 2 6
8
输出:
4
说明
1、7组成一队 3、5一队 2、6一队 9自己一队 输出4
输入:
3
1 1 9
8
输出:
1
说明
1、9组成一队 或者9自己一队 输出1
个人解法
提示:个人学习,并非最优解,欢迎指正
双指针
while True:
try:
n = int(input().strip())
list1 = list(map(int, input().strip().split()))
list1.sort(reverse=True)
N = int(input().strip())
i , j , res = 0 , n - 1 , 0
while i < j:
if list1[i] >= N:
res += 1
i += 1
elif list1[i] + list1[j] >= N:
res += 1
i += 1
j -= 1
else:
j -= 1
print(res)
except Exception as e:
break
总结
需要注意的地方:
- 本题比较简单,但是实际考试时有只通过了90%,不知道哪里错了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)