Submission #34842713


Source Code Expand

Copy
import itertools
import collections
N,M = map(int, input().split())
S = [str(input()) for _ in range(N)]
T = {str(input()) for _ in range(M)}
# N<=88!=40320
# _
# S1
# S78_7H8 = 3003
# 40320*3003 = 121080960 ≒ 10**8
# NG10**5 OK
# ∴OKXNG-1
char_len = sum([len(Si) for Si in S]) + N - 1 # XS_1
if char_len <= 16:
# _
for p in itertools.permutations(S,N):
# p:
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
import itertools
import collections

N,M = map(int, input().split())
S = [str(input()) for _ in range(N)]
T = {str(input()) for _ in range(M)}

# N<=8で8!=40320通りなので全探索が間に合いそう
# が、間に入れる_のパターンもある。
# 最悪パターンはSが全部1文字だった時。
# Sの間7か所に、8個_を詰めるので重複組み合わせ7H8 = 3003通りなので
# 40320*3003 = 121080960 ≒ 10**8 なので間に合うか、合わないか微妙
# だが、NGパターンは10**5 までなので、試しているうちに必ずOKなパターンが出る
# ∴全パターンを試して、OKなのが出ればXを出力、NGならば-1を出力

char_len = sum([len(Si) for Si in S]) + N - 1   # Xの最短文字長さ。Sの合計文字長と各間に_が1個は入るのでその分

if char_len <= 16:
    # まずは最低限の_しか入れないパターンを試す
    for p in itertools.permutations(S,N):
        # p:文字の並び
        ans = list()
        for j in range(N-1):
            ans.append(p[j])
            ans.append("_")

        ans.append(p[N-1])  # 最後の文字は後ろに_入らないのでループから分ける
        ans = ''.join(map(str,ans))

        if ans in T:
            pass
        elif len(ans) >= 3:
            print(ans)
            exit()

    # _を入れる個数を限界まで試す
    for i in range(1,17 - char_len):
        # i:挿入する_の個数
        for p in itertools.permutations(S,N):
            # p:文字の並び
            for v in itertools.combinations_with_replacement([k for k in range(N-1)],i):
                # v:_の挿入箇所
                counted_v = collections.Counter(v)  # 挿入箇所毎に個数をまとめておく
                ans = list()
                for j in range(N-1):
                    ans.append(p[j])
                    ans.append("_")

                    if counted_v[j] != 0:
                        for k in range(counted_v[j]):
                            ans.append("_")
                
                ans.append(p[N-1])  # 最後の文字は後ろに_入らないのでループから分ける
                ans = ''.join(map(str,ans))

                if ans in T:
                    pass
                elif len(ans) >= 3:
                    print(ans)
                    exit()

    # 全部試してダメなら、ない。
    print(-1)
else:
    # そもそも試せるパターンがないので、ない。
    print(-1)

Submission Info

Submission Time
Task D - Unique Username
User tonomotohide
Language PyPy3 (7.3.0)
Score 400
Code Size 2578 Byte
Status AC
Exec Time 310 ms
Memory 86044 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 400 / 400
Status
AC × 4
AC × 37
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 01_one_00.txt, 01_one_01.txt, 01_one_02.txt, 01_one_03.txt, 01_one_04.txt, 01_one_05.txt, 02_case_00.txt, 02_case_01.txt, 02_case_02.txt, 02_case_03.txt, 02_case_04.txt, 02_case_05.txt, 02_case_06.txt, 02_case_07.txt, 02_case_08.txt, 02_case_09.txt, 02_case_10.txt, 02_case_11.txt, 02_case_12.txt, 02_case_13.txt, 02_case_14.txt, 02_case_15.txt, 02_case_16.txt, 02_case_17.txt, 03_eight_00.txt, 03_eight_01.txt, 03_eight_02.txt, 03_eight_03.txt, 03_eight_04.txt, 03_eight_05.txt, 04_corner_00.txt, 04_corner_01.txt, 04_corner_02.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 75 ms 64668 KB
00_sample_01.txt AC 58 ms 64472 KB
00_sample_02.txt AC 53 ms 64460 KB
00_sample_03.txt AC 60 ms 64656 KB
01_one_00.txt AC 60 ms 65068 KB
01_one_01.txt AC 58 ms 65140 KB
01_one_02.txt AC 57 ms 65268 KB
01_one_03.txt AC 56 ms 65284 KB
01_one_04.txt AC 63 ms 65272 KB
01_one_05.txt AC 60 ms 65052 KB
02_case_00.txt AC 187 ms 84140 KB
02_case_01.txt AC 183 ms 83948 KB
02_case_02.txt AC 189 ms 84180 KB
02_case_03.txt AC 195 ms 84244 KB
02_case_04.txt AC 197 ms 84240 KB
02_case_05.txt AC 185 ms 84180 KB
02_case_06.txt AC 214 ms 84568 KB
02_case_07.txt AC 215 ms 84424 KB
02_case_08.txt AC 188 ms 84300 KB
02_case_09.txt AC 310 ms 85232 KB
02_case_10.txt AC 233 ms 84856 KB
02_case_11.txt AC 191 ms 84196 KB
02_case_12.txt AC 183 ms 85308 KB
02_case_13.txt AC 282 ms 86044 KB
02_case_14.txt AC 186 ms 84292 KB
02_case_15.txt AC 189 ms 85372 KB
02_case_16.txt AC 194 ms 85624 KB
02_case_17.txt AC 194 ms 84308 KB
03_eight_00.txt AC 186 ms 85524 KB
03_eight_01.txt AC 189 ms 85664 KB
03_eight_02.txt AC 183 ms 85528 KB
03_eight_03.txt AC 224 ms 85496 KB
03_eight_04.txt AC 228 ms 85364 KB
03_eight_05.txt AC 221 ms 85256 KB
04_corner_00.txt AC 60 ms 64848 KB
04_corner_01.txt AC 57 ms 64752 KB
04_corner_02.txt AC 59 ms 64660 KB


2025-04-15 (Tue)
13:15:07 +00:00