第一题通关,第二题士兵
通关这个就是双指针+贪心,处理好边界就都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))
全部评论
(3) 回帖