Pagini recente » Cod sursa (job #1335904) | Cod sursa (job #1729610) | Cod sursa (job #542060) | Cod sursa (job #1039611) | Cod sursa (job #2986125)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct Trie {
int cnt, ap;
Trie *fiu[26];
Trie() {
cnt = ap = 0;
memset(fiu, 0, sizeof(fiu));
}
};
int tip;
string c;
Trie *T;
void ins(string s)
{
Trie *x = T;
for (int i=0;i<s.size();i++){
int newn = s[i] - 'a';
if (!x->fiu[newn])
x->fiu[newn] = new Trie;
x = x->fiu[newn];
x->ap ++;
}
x->cnt ++;
}
void del(string s)
{
Trie *x = T;
for (int i=0;i<s.size();i++){
int newn = s[i] - 'a';
x = x->fiu[newn];
x->ap --;
}
x->cnt --;
}
int apar(string s)
{
Trie *x = T;
for (int i=0;i<s.size();i++){
int newn = s[i] - 'a';
if (x->fiu[newn] && x->fiu[newn]->ap)
x = x->fiu[newn];
else
return 0;
}
return x->cnt;
}
int pref(string s)
{
Trie *x = T;
int lg = 0;
for (int i=0;i<s.size();i++){
int newn = s[i] - 'a';
if (x->fiu[newn] && x->fiu[newn]->ap)
x = x->fiu[newn];
else
return lg;
lg ++;
}
return lg;
}
int main()
{
T = new Trie;
while(fin >> tip >> c) {
if (tip == 0) {
ins(c);
}else if (tip == 1){
del(c);
}else if (tip == 2){
fout << apar(c) << '\n';
}else{
fout << pref(c) << '\n';
}
}
return 0;
}