Code Formula 2014 予選A C - 決勝進出者
何人かのコードを見た感じ,これ人によって解法違いそう.
解法
(順位,予選時期,ID)をタプルとし,heapqに入れていく. 予選ごとにheapqを見て,(取り出した値から将来負けうる人数)+ (既に通過した人数)がK未満だったらその予選時にメールを送る. 取り出した値から将来負けうる人数は,(順位 - 1)*(N - i - 1)となる.
提出コード
コード
def main():
N, K = (int(i) for i in input().split())
A = [[int(i) for i in input().split()] for j in range(N)]
from heapq import heappop, heappush
hque = []
passed = set()
for i in range(N):
ans = []
for j, a in enumerate(A[i], start=1):
# (順位,予選時期,ID)
heappush(hque, (j, i, a))
for _ in range(len(hque)):
(jj, ii, aa) = heappop(hque)
v = (jj - 1)*(N - i - 1)
if aa not in passed and len(passed) + v < K:
ans.append(aa)
passed.add(aa)
elif aa not in passed:
heappush(hque, (jj, ii, aa))
ans.sort()
print(*ans)
if __name__ == '__main__':
main()
あさかつのEで出たんだけど,通せなかったのでLorentさんのツイートを見て通した. 上のコードはPyPyだとMLEする.なんか無駄なことをしてそうな?感じもするので,他の人のコードも参考にするのがよさそう. 記事投稿時にはPyPy(7.3.0)のACがなかった.judge-update-202004以前の提出も見たい場合,この拡張を入れるのがおすすめ.