第一行输入两个整数
代表关卡数量和获得跳关道具的条件。
第二行输入
个整数
代表通过每个关卡需要消耗的时间。
在一行上输出一个整数,表示小红通过这
个关卡所需的最少时间。
3 2 1 3 2
4
小红通过第二个关卡后获得跳关道具,此时消耗
单位时间;在第三个关卡使用跳关道具,不再消耗时间。
6 2 1 1 4 5 1 4
7
小红通过第二个关卡后获得第一个跳关道具;
在第四个关卡使用第一个跳关道具后得到第二个跳关道具;
在第六个关卡使用第二个跳关道具。
5 1 2 4 5 1 3
2
通过第一关后,后面的关卡都可以使用跳关道具。跳关也算一次成功的闯关。
ans = sum(arr) m = (n - 1) // k if m == 0: print(ans) else: sort_arr = sorted(range(n), key=lambda i: -arr[i]) buckets = list(range(m+2)) def find(x): if buckets[x] == x: return x buckets[x] = find(buckets[x]) return buckets[x] def union(a, b): buckets[a] = find(buckets[b]) use_cnt = 0 for idx in sort_arr: bucket = idx // k if bucket < 1: continue tickt = find(bucket) if tickt >= 1: use_cnt += 1 ans -= arr[idx] union(tickt, tickt-1) if use_cnt == m: break print(ans)