結果
| 問題 |
No.517 壊れたアクセサリー
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 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 |
ソースコード
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))