Pagini recente » Cod sursa (job #1032275) | Monitorul de evaluare | Cod sursa (job #3240317) | Cod sursa (job #3202871) | Cod sursa (job #2219683)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("trie.in");
ofstream fout ("trie.out");
struct nodTrie{
int x, y;
nodTrie* fii [26];
nodTrie (){
x = y = 0;
for (int i = 0; i < 26; i ++)fii [i] = NULL;
}
}*root;
int a;string v;
int f1 (string s){
nodTrie *p = root;
for (int i = 0; i < s.size (); i ++) {
if (p -> fii [v [i] - 'a'] == NULL)return i;
p = p -> fii [v [i] - 'a'];
}return s.size ();
}
void Pop (string s){
nodTrie *p = root, *p1;
for (int i = 0; i < s.size (); i ++){
p1 = p;
p = p -> fii [v [i] - 'a'];
p -> x --;
if (p1 -> x == 0)delete p1;
else if (p -> x == 0)p1 -> fii [v [i] - 'a'] = NULL;
}p -> y--;
if (p -> x == 0)delete p;
}
void adaug (string s){
nodTrie *p = root;
for (int i = 0; i < s.size (); i ++) {
if (p -> fii [v [i] - 'a'] == NULL)
p -> fii [v [i] - 'a'] = new nodTrie;
p = p -> fii [v [i] - 'a'];
p -> x ++;
}p -> y ++;
}
int f2 (string s){
nodTrie *p = root;
for (int i = 0; i < s.size (); i ++) {
if (p -> fii [v [i] - 'a'] == NULL)return 0;
p = p -> fii [v [i] - 'a'];
}return p -> y;
}
int main (void){
root = new nodTrie;root -> x = 1;
while (fin >> a >> v){
if (a == 3)fout << f1 (v) << '\n';
if (a == 2)fout << f2 (v) << '\n';
if (a == 1)Pop (v);
if (a == 0)adaug (v);
}return 0;
}