我的代码是用 python 写的,没有超时,遇到了两个 wa。
原代码如下
import functools
l = [int(i) for i in input().split(' ')]
n, m=l[0], l[1]
s = []
tot_len = 0
for _ in range(n):
tmp = input()
s.append(tmp)
tot_len += len(tmp)
t = set()
for _ in range(m):
t.add(input())
num_of = 16-tot_len
def f(l, num_of):
if len(l) == 1:
yield l[0]
return
for i in range(len(l)):
s1 = l[i]
l2 = l[:i] + l[i+1:]
for j in range(1, num_of+1):
for s2 in f(l2, num_of-j):
yield s1+"_"*j+s2
return
for i in f(s, num_of):
# print(i)
if i in t:
continue
if len(i) > 16: # 错误在这里
continue
else:
print(i)
exit()
print(-1)
WA 的原因在于,题目要求输出的串 X 的长度需要大于 3 ,而我并没有对串的长度下限加以限制。
将代码修改后,通过。
import functools
l = [int(i) for i in input().split(' ')]
n, m=l[0], l[1]
s = []
tot_len = 0
for _ in range(n):
tmp = input()
s.append(tmp)
tot_len += len(tmp)
t = set()
for _ in range(m):
t.add(input())
num_of = 16-tot_len
def f(l, num_of):
if len(l) == 1:
yield l[0]
return
for i in range(len(l)):
s1 = l[i]
l2 = l[:i] + l[i+1:]
for j in range(1, num_of+1):
for s2 in f(l2, num_of-j):
yield s1+"_"*j+s2
return
for i in f(s, num_of):
# print(i)
if i in t:
continue
if 3 <= len(i) <= 16: # 增加条件判定
print(i)
exit()
else:
continue
print(-1)