社区讨论

【警示后人】刚刚遇到的问题

AT_abc268_d [ABC268D] Unique Username参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lxk78ei9
此快照首次捕获于
2024/06/18 17:25
2 年前
此快照最后确认于
2024/06/18 20:14
2 年前
查看原帖
我的代码是用 python 写的,没有超时,遇到了两个 wa。
原代码如下
PYTHON
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 ,而我并没有对串的长度下限加以限制。
将代码修改后,通过。
PYTHON
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)

回复

0 条回复,欢迎继续交流。

正在加载回复...