百度9.13 A卷

第一题通关,第二题士兵

通关这个就是双指针+贪心,处理好边界就都AC了,代码比较乱哈
n, m, t = map(int, input().strip().split())
a = list(map(int, input().rstrip().split()))
b = list(map(int, input().rstrip().split()))
res = 0

a1 = []
t1 = 0
for i in range(n):
    t1 += a[i]
    if t1 > t:#超过的就没用了
        break
    a1.append(t1)

b1 = []
t1 = 0
for i in range(m):
    t1 += b[i]
    if t1 > t:
        break
    b1.append(t1)

n = len(a1)
m = len(b1)

i = -1
j = m - 1
at = 0#要考虑完全不用a的情况
while at <= t and i < n:
    while j >= 0 and at + b1[j] > t:
        j -= 1

    res = max(res, (i + 1 + j + 1))
    i += 1
    if i < n:
        at = a1[i]
print(res)

第二题这个我就直接局部排序了,但是把想想肯定也会超时,试了半天优化还不如不优化,求大佬给一份AC代码,我这个A了百分之82
n, m = map(int, input().strip().split())
h = list(map(int, input().strip().split()))
for i in range(m):
    t, k = map(int, input().strip().split())
    if t == 1:
        temp = h[:k]
        temp.sort()
        h[:k] = temp
    else:
        temp = h[:k]
        temp.sort(reverse=True)
        h[:k] = temp
res = map(str, h)
print(' '.join(res))



#百度#
全部评论
楼主收到面试邀约了么
点赞 回复 分享
发布于 2022-09-16 12:21 广东
82是超时了,需要把k存到一个递减队列里,因为出现一个较大的k值会把前面的较小值的操作都覆盖掉。然后再依次排序即可AC。
点赞 回复 分享
发布于 2022-09-14 01:38 陕西
为何如此冷清,难道是因为我没贴具体题目吗
点赞 回复 分享
发布于 2022-09-13 22:51 香港

相关推荐

07-07 12:25
门头沟学院 Java
程序员牛肉:你这个智邮公司做的就是那个乐山市税务系统的服务吗?
点赞 评论 收藏
分享
07-15 11:41
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务