結果
問題 | No.1816 MUL-DIV Game |
ユーザー | 👑 Kazun |
提出日時 | 2022-01-21 21:29:53 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 709 ms / 2,000 ms |
コード長 | 3,636 bytes |
コンパイル時間 | 622 ms |
コンパイル使用メモリ | 82,048 KB |
実行使用メモリ | 100,708 KB |
最終ジャッジ日時 | 2024-05-04 12:00:29 |
合計ジャッジ時間 | 9,142 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 43 ms
52,864 KB |
testcase_01 | AC | 43 ms
52,736 KB |
testcase_02 | AC | 43 ms
52,864 KB |
testcase_03 | AC | 44 ms
53,376 KB |
testcase_04 | AC | 44 ms
52,864 KB |
testcase_05 | AC | 44 ms
52,736 KB |
testcase_06 | AC | 43 ms
52,864 KB |
testcase_07 | AC | 44 ms
52,736 KB |
testcase_08 | AC | 43 ms
52,608 KB |
testcase_09 | AC | 50 ms
60,800 KB |
testcase_10 | AC | 59 ms
68,864 KB |
testcase_11 | AC | 58 ms
68,224 KB |
testcase_12 | AC | 54 ms
65,536 KB |
testcase_13 | AC | 483 ms
91,540 KB |
testcase_14 | AC | 358 ms
86,400 KB |
testcase_15 | AC | 406 ms
90,784 KB |
testcase_16 | AC | 260 ms
79,616 KB |
testcase_17 | AC | 602 ms
95,836 KB |
testcase_18 | AC | 587 ms
94,880 KB |
testcase_19 | AC | 379 ms
88,960 KB |
testcase_20 | AC | 623 ms
95,688 KB |
testcase_21 | AC | 349 ms
85,248 KB |
testcase_22 | AC | 320 ms
82,176 KB |
testcase_23 | AC | 45 ms
52,864 KB |
testcase_24 | AC | 45 ms
52,992 KB |
testcase_25 | AC | 706 ms
99,908 KB |
testcase_26 | AC | 73 ms
83,072 KB |
testcase_27 | AC | 700 ms
100,708 KB |
testcase_28 | AC | 73 ms
82,688 KB |
testcase_29 | AC | 709 ms
99,536 KB |
ソースコード
"""参考元 https://tsubo.hatenablog.jp/entry/2020/06/15/124657 """ import heapq class Heap_Dict: def __init__(self, mode=True): """ Heap Dict クラスの作成. Mode: True → 最小値, False → 最大値 """ self.heap=[] self.dict={} self.__mode=bool(mode) self.__length=0 def __bool__(self): return bool(self.heap) def __len__(self): return self.__length def __contains__(self, x): return self.is_exist(x) def insert(self, x): """ 要素 x を追加する. """ if self.__mode and not self.is_exist(x): heapq.heappush(self.heap,x) elif not self.__mode and not self.is_exist(x): heapq.heappush(self.heap,-x) if x in self.dict: self.dict[x]+=1 else: self.dict[x]=1 self.__length+=1 def erase(self, x): """ x を消す (存在しない場合は KeyError) . """ if x not in self: raise KeyError(x) self.dict[x]-=1 self.__length-=1 while self.heap: y=self.heap[0] if not self.__mode:y=-y if self.dict[y]==0: heapq.heappop(self.heap) else: break def discard(self, x): """ x を消す (存在しない場合は何もしない). """ if x not in self: return self.dict[x]-=1 self.__length-=1 while self.heap: y=self.heap[0] if not self.__mode:y=-y if self.dict[y]==0: heapq.heappop(self.heap) else: break def is_exist(self, x): """ キューに x が存在するかどうかを判定する. """ return bool(self.dict.get(x,0)) def get_min(self, default=float("inf")): """ キューにある最小値を返す. ※ Mode=True でないと使えない. """ assert self.__mode if self.heap: return self.heap[0] else: return default def pop_min(self): """ キューにある最小値を取り出す. ※ Mode=True でないと使えない. """ assert self.__mode and bool(self) x=self.get_min() self.erase(x) return x def get_max(self, default=-float("inf")): """ キューにある最大値を返す. ※ Mode=False でないと使えない. """ assert not self.__mode if self.heap: return -self.heap[0] else: return default def pop_max(self): """ キューにある最小値を取り出す. ※ Mode = False でないと使えない. """ assert (not self.__mode) and bool(self) x=self.get_max() self.erase(x) return x def count(self, x): """ x の個数を求める. """ return self.dict.get(x,0) #================================================== N=int(input()) A=list(map(int,input().split())) if N==1: X=A[0] elif N%2==1: X=1 else: H1=Heap_Dict(1) H2=Heap_Dict(0) for a in A: H1.insert(a) H2.insert(a) for i in range(N-1): if i%2==0: p=H1.pop_min() q=H1.pop_min() H1.insert(p*q) H2.discard(p); H2.discard(q) H2.insert(p*q) else: p=H2.pop_max() q=H2.pop_max() H2.insert(1) H1.discard(p); H1.discard(q) H1.insert(1) X=H1.pop_min() print(X)