AcWing 561. 大按钮python,y总模板
原题链接
简单
作者:
柠檬茶去冰
,
2024-12-10 14:37:19
,
所有人可见
,
阅读 3
def insert(char): #Trie,y总模板
global idx
q=0
for i in range(len(char)):
u=ord(char[i])-ord('B')
if not Trie[q][u]:
idx+=1
Trie[q][u]=idx
q=Trie[q][u]
if ed[q]: #添加判断在建立Trie过程中是否遇到有标记的结点
return #有说明该char的前缀在之前插入的char中存在,所以直接结束
else:
ed[q]+=1
if len(char)<=n:#记录该禁用开头,及其所有
a.append(2**(n-len(char)))
t=int(input())
for _ in range(t):
Trie = [[0] * 26 for i in range(10000)]
ed = [0] * 10000
idx = 0
n,p=map(int,input().split())
a=[]
s=2**n
ans=[]#记录要插入的序列
for i in range(p):
sh=input()
ans.append(sh)
ans.sort(key=len)#因为只有短的字符串才有可能是长的字符串的前缀。
for i in ans:
insert(i)
print(f'Case #{_+1}: {s-sum(a)}')