結果
| 問題 |
No.205 マージして辞書順最小
|
| コンテスト | |
| ユーザー |
nightyhotdog
|
| 提出日時 | 2018-05-25 01:00:55 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,976 bytes |
| コンパイル時間 | 85 ms |
| コンパイル使用メモリ | 12,800 KB |
| 実行使用メモリ | 11,136 KB |
| 最終ジャッジ日時 | 2024-06-28 17:47:42 |
| 合計ジャッジ時間 | 1,389 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 WA * 1 |
| other | AC * 7 WA * 8 |
ソースコード
import collections
import itertools
class Deque(collections.deque):
def __le__(self, other):
for e1, e2 in itertools.zip_longest(
#
self, other, fillvalue='{'):
if e1 == e2:
continue
elif e1 < e2:
return True
elif e1 > e2:
return False
return True
def __lt__(self, other):
return Deque.__le__(self, other) and not Deque.__eq__(self, other)
def main():
str_deque = initialize()
up_heap(str_deque)
print(min_dict_order(str_deque))
def initialize():
N = int(input())
str_deque = Deque(Deque(input()) for i in range(N))
return str_deque
def up_heap(str_deque: Deque):
for index in range(len(str_deque) - 1, -1, -1):
min_index = get_min_index(str_deque, index)
if min_index != index:
swap(str_deque, index, min_index)
def min_dict_order(str_deque: Deque):
seq = ''
while True:
chr_deque = str_deque[0]
seq += chr_deque.popleft()
if not chr_deque:
str_deque.popleft()
try:
str_deque.appendleft(str_deque.pop())
except IndexError:
break
down_heap(str_deque)
return seq
def down_heap(str_deque: Deque):
index = 0
while True:
min_index = get_min_index(str_deque, index)
if min_index == index:
break
else:
swap(str_deque, index, min_index)
index = min_index
def get_min_index(str_deque, index):
dct = {index: str_deque[index]}
try:
dct.update({2 * index: str_deque[2 * index]})
except IndexError:
pass
try:
dct.update({2 * index + 1: str_deque[2 * index + 1]})
except IndexError:
pass
return min(dct, key=dct.get)
def swap(seq, i, j):
tmp = seq[i]
seq[i] = seq[j]
seq[j] = tmp
if __name__ == '__main__':
main()
nightyhotdog