AcWing 4191. 加密信息(python)
原题链接
简单
作者:
柠檬茶去冰
,
2024-12-09 18:26:52
,
所有人可见
,
阅读 2
PYthon 代码
Trie=[[0]*2 for i in range(1000000)]
ed=[0]*1000000
st=[0]*1000000
idx=0
def insert(char):
global idx
p=0
for i in range(len(char)):
u=ord(char[i])-ord('0') #u存的是Trie的节点的值
if not Trie[p][u]:#不存在,往下建立
idx+=1 #idx是节点的深度
Trie[p][u]=idx
p=Trie[p][u]
st[p]+=1 #记录每一个节点出现的次数
ed[p]+=1 #记录尾节点出现的次数
def query(char):
p=0
l=0
for i in range(len(char)):
u=ord(char[i])-ord('0')
if not Trie[p][u]:
return l #返回尾节点的次数的和
p=Trie[p][u]
l+=ed[p]
return l+st[p]-ed[p]#st也记录了尾节点,因此要减去,还有加上l是逆向匹配成功的次数
n,m=map(int,input().split())
for i in range(n):
a=input().split()[1:]
insert(''.join(a))
for i in range(m):
a=input().split()[1:]
print(query(''.join(a)))