結果

問題 No.517 壊れたアクセサリー
ユーザー rpy3cpp
提出日時 2017-05-28 22:09:29
言語 Python3
(3.13.1 + numpy 2.2.1 + scipy 1.14.1)
結果
AC  
実行時間 31 ms / 2,000 ms
コード長 1,242 bytes
コンパイル時間 233 ms
コンパイル使用メモリ 12,544 KB
実行使用メモリ 10,880 KB
最終ジャッジ日時 2024-09-21 15:28:28
合計ジャッジ時間 1,371 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 15
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

def read_data():
N = int(input())
ns = [input() for _ in range(N)]
M = int(input())
ms = [input() for _ in range(M)]
return N, M, ns, ms
def solve(N, M, ns, ms):
pool = "".join(ns)
LEN = sum(len(n) for n in ns)
left = [set() for _ in range(26)]
right = [set() for _ in range(26)]
process(ns, left, right)
process(ms, left, right)
ans = [""] * 26
for i in range(26):
if chr(i + ord('A')) not in pool:continue
fill(i, left)
fill(i, right)
if len(left[i]) + len(right[i]) != LEN - 1:
return -1
ans[len(left[i])] = chr(i + ord('A'))
return ''.join(ans)
def process(ns, left, right):
for word in ns:
n = len(word)
for i in range(n - 1):
for j in range(i + 1, n):
ci = ord(word[i]) - ord('A')
cj = ord(word[j]) - ord('A')
right[ci].add(cj)
left[cj].add(ci)
def fill(i, left):
stack = list(left[i])
while stack:
j = stack.pop()
for k in left[j]:
if k in left[i]:
continue
stack.append(k)
left[i].add(k)
N, M, ns, ms = read_data()
print(solve(N, M, ns, ms))
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0