Pagini recente » Cod sursa (job #2690228) | Cod sursa (job #1345795) | Cod sursa (job #2317308) | Cod sursa (job #1951615) | Cod sursa (job #2630222)
class TrieNode:
def __init__(self):
self.fin = 0
self.nr = 0
self.fiu = [None]*26
def fc(ch):
return ord(ch) - ord('a')
def ins(node, s, k):
if k == len(s):
node.fin += 1
return 0
i = fc(s[k])
if not node.fiu[i]:
node.fiu[i] = TrieNode()
node.nr += 1
ins(node.fiu[i], s, k + 1)
def delete(node, s, k):
if k == len(s):
node.fin -= 1
elif delete(node.fiu[fc(s[k])], s, k + 1):
node.fiu[fc(s[k])] = None
node.nr -= 1
if node.fin == 0 and node.nr == 0 and node != T:
return 1
return 0
def find(node, s, k):
if k == len(s):
return node.fin
i = fc(s[k])
if node.fiu[i]:
return find(node.fiu[i], s, k + 1)
return 0
def pref(node, s, k):
if k == len(s) or not node.fiu[fc(s[k])]:
return k
return pref(node.fiu[fc(s[k])], s, k + 1)
T = TrieNode()
with open("trie.in", "r") as file, open("trie.out", "w") as g:
try:
while 1:
op, st = next(file).split()
if op == '0': ins(T, st, 0)
elif op == '1': delete(T, st, 0)
elif op == '2': g.write(str(find(T, st, 0)) + '\n')
elif op == '3': g.write(str(pref(T, st, 0)) + '\n')
except:
pass