Cod sursa(job #2535519)

Utilizator TeodorCotetCotet Teodor TeodorCotet Data 31 ianuarie 2020 22:55:43
Problema Trie Scor 0
Compilator py Status done
Runda Arhiva educationala Marime 1.33 kb

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)))