Pagini recente » Cod sursa (job #3151618) | Cod sursa (job #1214058) | Cod sursa (job #2618314) | Cod sursa (job #1302824) | Cod sursa (job #3242046)
#include <fstream>
using namespace std;
ifstream cin("trie.in");
ofstream cout("trie.out");
int c,nod,p;
char s[21];
struct Nod{
int prefix,cuvant,fr[27];
}trie[100001];
void add(int n){
trie[n].prefix++;
if(s[p]==0)
trie[n].cuvant++;
else{
if(trie[n].fr[s[p]-'a']==0)
trie[n].fr[s[p]-'a']=++nod;
p++;
add(trie[n].fr[s[p-1]-'a']);
}
}
void drop(int n){
trie[n].prefix--;
if(s[p]==0)
trie[n].cuvant--;
else
p++,drop(trie[n].fr[s[p-1]-'a']);
}
int nr(int n){
if(s[p]==0)
return trie[n].cuvant;
p++;
if( trie[n].fr[s[p-1]-'a'])
return nr(trie[n].fr[s[p-1]-'a']);
else
return 0;
}
int lgpref;
void pref_max(int n, int lg){
if(trie[n].prefix>0){
lgpref=lg;
if(s[p]==0)
return;
if(trie[n].fr[s[p]-'a']!=0)
{
p++;
pref_max(trie[n].fr[s[p-1]-'a'], lg+1);
}
else
return ;
}
else
return ;
}
int main()
{
while(cin>>c>>s){
if(c==0){
p=0;
add(0);
}else if(c==1){
p=0;
drop(0);
}else if(c==2){
p=0;
cout<<nr(0)<<'\n';
}else{
p=0;lgpref=0;
pref_max(0,0);
cout<<lgpref<<'\n';
}
}
return 0;
}