【警示后人】刚刚遇到的问题
查看原帖
【警示后人】刚刚遇到的问题
645279
OhanaTyan楼主2024/6/18 17:24

我的代码是用 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 的原因在于,题目要求输出的串 XX 的长度需要大于 33 ,而我并没有对串的长度下限加以限制。

将代码修改后,通过。

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)
2024/6/18 17:24
加载中...