Pagini recente » Cod sursa (job #2710033) | Cod sursa (job #1914197) | Cod sursa (job #254174) | Cod sursa (job #169244) | Cod sursa (job #3347755)
#include <fstream>
#include <string>
using namespace std;
ifstream fin ("trie.in");
ofstream fout ("trie.out");
const int mxL = 20, mxC = 1e5 + 1, mxN = mxL * mxC + 1;
int trie[mxN][26]; //26 de litere in alfabet
int cnt[mxN], endw[mxN], nxt = 1;
void add(string &a){
int nod = 1;
for(char c : a){
int v = c - 'a';
if(!trie[nod][v])
trie[nod][v] = ++nxt;
nod = trie[nod][v];
cnt[nod]++;
}
endw[nod]++;
}
void remove(string &a){
int nod = 1;
for(char c : a){
int v = c - 'a';
if(!trie[nod][v]) return;
nod = trie[nod][v];
cnt[nod]--;
}
endw[nod]--;
}
int countWord(string &a){
int nod = 1;
for(char c : a){
int v = c - 'a';
if(!trie[nod][v]) return 0;
nod = trie[nod][v];
}
return endw[nod];
}
int prefix(string &a){
int nod = 1, len = 0;
for(char c : a){
int v = c - 'a';
if(!trie[nod][v] || !cnt[trie[nod][v]]) break;
nod = trie[nod][v];
len++;
}
return len;
}
int main(){
int q;
string aux;
while(fin >> q){
fin >> aux;
if(q == 0)
add(aux);
else if(q == 1)
remove(aux);
else if(q == 2)
fout << countWord(aux) << "\n";
else
fout << prefix(aux) << "\n";
}
}