Pagini recente » Cod sursa (job #1256858) | Cod sursa (job #2330590) | Cod sursa (job #426303) | Cod sursa (job #1358461) | Cod sursa (job #2630223)
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()
except:
pass