Cod sursa(job #2482401)

Utilizator redstonegamer22Andrei Ion redstonegamer22 Data 28 octombrie 2019 11:01:38
Problema Trie Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.41 kb

#include <bits/stdc++.h>

using namespace std;

#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")

ifstream in("trie.in");
ofstream out("trie.out");

struct node {
    map< char, node > mp;
    int signs = 0, exists = 0;
};

int main()
{
    //cout << "Hello world!" << endl;

    node root;

    int op; string cnt;
    while(in >> op >> cnt) {
        if(op == 0) {
            node *self = &root;
            for(int i = 0; i < cnt.size(); i++) {
                self = &(self->mp[cnt[i]]);
                self->exists++;
            }
            self->signs++;
        }
        if(op == 1) {
            node *self = &root;
            for(int i = 0; i < cnt.size(); i++) {
                self = &(self->mp[cnt[i]]);
                self->exists--;
            }
            self->signs--;
        }
        if(op == 2) {
            node *self = &root;
            for(int i = 0; i < cnt.size(); i++) {
                self = &(self->mp[cnt[i]]);
            }
            out << self->signs << endl;
        }
        if(op == 3) {
            node *self = &root;
            int len = 0;
            for(; len < cnt.size() && (self->mp[cnt[len]]).exists; len++) {
                if((self->mp[cnt[len]]).exists) {
                    self = &(self->mp[cnt[len]]);
                }
            }
            out << len << endl;
        }
    }

    return 0;
}