提出 #27471515
ソースコード 拡げる
from collections import defaultdict from heapq import heappush, heappop class DeletableMaxHeapQ(): def __init__(self): self.H = [] self.HC = defaultdict(int) def hpush(self, x): heappush(self.H, -x) self.HC[x] += 1 def hpop(self): t = -heappop(self.H) while not self.HC[t]: t = -heappop(self.H) self.HC[t] -= 1 return t def hmax(self): t = -self.H[0] while not self.HC[t]: heappop(self.H) t = -self.H[0] return t def hdel(self, x): assert self.HC[x] > 0 self.HC[x] -= 1 class LR_trick(): def __init__(self, n): self.n = n self.L = [i - 1 for i in range(n)] self.R = [i + 1 for i in range(n)] self.X = [1] * n def delete(self, i): self.X[i] = 0 def left(self, i): i = self.L[i] li = [] while i >= 0 and self.X[i] == 0: li.append(i) i = self.L[i] for j in li: self.L[j] = i return i def right(self, i): i = self.R[i] li = [] while i < self.n and self.X[i] == 0: li.append(i) i = self.R[i] for j in li: self.R[j] = i return i def debug(self): print("L =", self.L) print("R =", self.R) print("X =", self.X) N, M = map(int, input().split()) A = [int(a) for a in input().split()] if M * 2 == N: print(sum(A)) exit() if M > N - M: M = N - M dh = DeletableMaxHeapQ() lr = LR_trick(N) for i in range(N - 2): x = (A[i] + A[i+1] << 20) + i dh.hpush(x) ans = 0 mmm = (1 << 20) - 1 for _ in range(M): x = dh.hpop() i = x & mmm j = lr.right(i) lr.delete(i) lr.delete(j) ans += x >> 20 l = lr.left(i) r = lr.right(j) if l >= 0: y = (A[l] + A[i] << 20) + l dh.hdel(y) if r < N - 1: y = (A[j] + A[r] << 20) + j dh.hdel(y) if 0 <= l and r < N - 1: y = (A[l] + A[r] << 20) + l dh.hpush(y) print(ans)
提出情報
提出日時 | |
---|---|
問題 | H - Red and Blue Lamps |
ユーザ | Kiri8128 |
言語 | PyPy3 (7.3.0) |
得点 | 600 |
コード長 | 2224 Byte |
結果 | AC |
実行時間 | 1163 ms |
メモリ | 160104 KiB |
ジャッジ結果
セット名 | Sample | All | ||||
---|---|---|---|---|---|---|
得点 / 配点 | 0 / 0 | 600 / 600 | ||||
結果 |
|
|
セット名 | テストケース |
---|---|
Sample | sample_01.txt, sample_02.txt, sample_03.txt |
All | hand_01.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, random_20.txt, random_21.txt, random_22.txt, random_23.txt, random_24.txt, sample_01.txt, sample_02.txt, sample_03.txt |
ケース名 | 結果 | 実行時間 | メモリ |
---|---|---|---|
hand_01.txt | AC | 74 ms | 65504 KiB |
random_01.txt | AC | 266 ms | 90356 KiB |
random_02.txt | AC | 416 ms | 96600 KiB |
random_03.txt | AC | 778 ms | 127532 KiB |
random_04.txt | AC | 389 ms | 94284 KiB |
random_05.txt | AC | 567 ms | 102892 KiB |
random_06.txt | AC | 364 ms | 92756 KiB |
random_07.txt | AC | 284 ms | 124544 KiB |
random_08.txt | AC | 935 ms | 144672 KiB |
random_09.txt | AC | 185 ms | 79688 KiB |
random_10.txt | AC | 643 ms | 127552 KiB |
random_11.txt | AC | 175 ms | 125624 KiB |
random_12.txt | AC | 637 ms | 136704 KiB |
random_13.txt | AC | 1151 ms | 158100 KiB |
random_14.txt | AC | 1163 ms | 160104 KiB |
random_15.txt | AC | 658 ms | 136236 KiB |
random_16.txt | AC | 172 ms | 125320 KiB |
random_17.txt | AC | 155 ms | 120928 KiB |
random_18.txt | AC | 242 ms | 123124 KiB |
random_19.txt | AC | 269 ms | 128164 KiB |
random_20.txt | AC | 256 ms | 128048 KiB |
random_21.txt | AC | 146 ms | 113256 KiB |
random_22.txt | AC | 832 ms | 133128 KiB |
random_23.txt | AC | 216 ms | 108912 KiB |
random_24.txt | AC | 258 ms | 141696 KiB |
sample_01.txt | AC | 51 ms | 65636 KiB |
sample_02.txt | AC | 56 ms | 65188 KiB |
sample_03.txt | AC | 57 ms | 65408 KiB |