Pagini recente » Cod sursa (job #1131422) | Cod sursa (job #1054822) | Cod sursa (job #307479) | Cod sursa (job #3292118) | Cod sursa (job #3276682)
#include <fstream>
using namespace std;
ifstream cin("trie.in");
ofstream cout("trie.out");
int task,noduri,i,lg;
string s;
struct nod{
int cuvant,prefix,fr[26];
}trie[300001];
void add(int n){
trie[n].prefix++;
if(s[i]==0){
trie[n].cuvant++;
return;
}
if(trie[n].fr[s[i]-'a']==0)
trie[n].fr[s[i]-'a']=++noduri;
add(trie[n].fr[s[i++]-'a']);
}
void pop(int n){
trie[n].prefix--;
if(s[i]==0)
trie[n].cuvant--;
else
pop(trie[n].fr[s[i++]-'a']);
}
int get_count(int n){
if(s[i]==0)
return trie[n].cuvant;
if(trie[n].fr[s[i]-'a']==0)
return 0;
else
return get_count(trie[n].fr[s[i++]-'a']);
}
void max_prefix(int n){
if(trie[n].prefix==0)
return;
lg=i;
if(s[i]==0)
return ;
if(trie[n].fr[s[i]-'a']!=0)
max_prefix(trie[n].fr[s[i++]-'a']);
}
signed main()
{
while(cin>>task>>s){
i=0;
if(task==0)
add(0);
else if(task==1)
pop(0);
else if(task==2)
cout<<get_count(0)<<'\n';
else{
lg=0;
max_prefix(0);
cout<<lg<<'\n';
}
}
return 0;
}