Pagini recente » Cod sursa (job #2322120) | Cod sursa (job #1794111) | Cod sursa (job #1720939) | Cod sursa (job #67648) | Cod sursa (job #2449279)
#!/usr/bin/env python3
import sys
sys.stdout = open('trie.out', 'w')
def letCode(let): return ord(let) - ord('a')
class Node(object):
def __init__(self):
self.cnt = 0
self.links = [None] * 27
def add(self, w):
self.cnt += 1
if w:
idx = letCode(w[0])
if self.links[idx] is None:
self.links[idx] = Node()
self.links[idx].add(w[1:])
def remove(self, w):
self.cnt -= 1
if w:
idx = letCode(w[0])
self.links[idx].remove(w[1:])
if self.links[idx].cnt == 0:
self.links[idx] = None
with open('trie.in', 'r') as f:
Trie = Node()
def freq(w):
node = Trie
for c in map(letCode, w):
node = node.links[c]
if node is None: return 0
return node.cnt
def longestPrefixLen(w):
lg, node = 0, Trie
for i, c in enumerate(map(letCode, w)):
node = node.links[c]
if node is None: break
if node.cnt > 1:
lg = i + 1
return lg
for line in f:
op = tuple(line.split())
if op[0] == '0': Trie.add(op[1] + '{')
elif op[0] == '1': Trie.remove(op[1] + '{')
elif op[0] == '2': print(freq(op[1] + '{'))
elif op[0] == '3': print(longestPrefixLen(op[1]))