Pagini recente » Cod sursa (job #61218) | Cod sursa (job #1134341) | Cod sursa (job #1444609) | Cod sursa (job #1301786) | Cod sursa (job #2535519)
import string
def add(trie, w):
if w[0] not in trie:
trie[w[0]] = {'count': 0}
if len(w) == 1:
trie[w[0]]['count'] += 1
else:
add(trie[w[0]], w[1:])
def delete(trie, w):
if len(w) == 1:
trie[w[0]]['count'] -= 1
if trie[w[0]]['count'] == 0:
del trie[w[0]]
else:
delete(trie[w[0]], w[1:])
if len(trie[w[0]]) == 1:
del trie[w[0]]
def count(trie, w):
if len(w) == 1:
if w[0] in trie:
return trie[w[0]]['count']
else:
return 0
else:
if w[0] in trie:
return count(trie[w[0]], w[1:])
else:
return 0
def common_prefix(trie, w):
if w[0] in trie:
return w[0] + common_prefix(trie[w[0]], w[1:])
else:
return ''
if __name__ == "__main__":
trie = {'count': 0}
with open('trie.in', 'rt') as fin, open('trie.out', 'wt') as fout:
for line in fin:
t, w = line.split()
t = int(t)
if t == 0:
add(trie, w)
elif t == 1:
delete(trie, w)
elif t == 2:
cnt = count(trie, w)
fout.write('{}\n'.format(cnt))
elif t == 3:
pref = common_prefix(trie, w)
fout.write('{}\n'.format(len(pref)))