【发布时间】:2021-03-08 07:04:10
【问题描述】:
你维护一个敌人列表的数组 A,按照难度降序排列,即最难的 bug 将是数组的第一个元素。最初,代码中没有错误。你有 N 个任务。
输入格式:
第一行包含一个整数N,表示任务数。
接下来的 N 行包含下面提到的两种操作之一。
-
1 P:将难度为 P 的 bug 添加到数组 A 中。
-
2:对数组进行降序排序,在排序后的数组中打印
(n / 3)thbug的难度,其中n为数组A的大小。如果bug个数小于3,则打印Not enough evidence。
代码:
def get_index(a, v):
lo = 0
hi = len(a)
if not a:
return 0
else:
while lo < hi:
mid = (lo+hi)//2
if a[mid] > v:
lo = mid+1
else:
hi = mid
return hi
t = int(input())
arr = []
for _ in range(t):
op = input().split()
if len(op) == 2:
index = get_index(arr, int(op[1]))
arr.insert(index, int(op[1]))
elif len(arr) < 3:
print("Not enough enemies")
else:
print(arr[(len(arr)//3)-1])
约束:
Getting Time Limit Exceeding error for #input 17(可能是一个大输入)。 Here is a complete question 来自 HackerEarth。
如何针对大输入优化代码?
【问题讨论】:
-
追加新元素并仅在输入 2 时对数组进行排序不是更快吗?
-
@gionni 这种方法会增加时间,因为我们每次获得输入中的 2 个元素时都需要排序(我尝试过,但更多测试用例出现时间限制错误)。
-
好吧,我想如果你输入一个交替的 1 和 2 操作序列,它会花费更长的时间,但否则应该花费更少的时间。无论如何,我认为this 可能会有所帮助。
标签: python arrays algorithm sorting