Pagini recente » Cod sursa (job #215937) | Borderou de evaluare (job #1533594) | Statistici Coldea Matei Alexandru (Mateipro198) | Cod sursa (job #1036623) | Cod sursa (job #3349062)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("trie.in");
ofstream cout("trie.out");
int task,r;
string s;
struct trie{
int cuv,prefix;
trie* fr[26];
trie(){
cuv=prefix=0;
for(int i=0;i<26;i++)
fr[i]=nullptr;
}
};
trie* root=new trie;
void add(trie* nod,int i){
(*nod).prefix++;
if(s[i]==0){
(*nod).cuv++;
return ;
}
if((*nod).fr[s[i]-'a']==nullptr)
(*nod).fr[s[i]-'a']=new trie;
add((*nod).fr[s[i]-'a'],i+1);
}
void erase(trie* nod,int i){
(*nod).prefix--;
if(s[i]==0){
(*nod).cuv--;
return ;
}
erase((*nod).fr[s[i]-'a'],i+1);
}
void aparitii(trie* nod,int i){
if(s[i]==0){
r=(*nod).cuv;
return ;
}
if((*nod).fr[s[i]-'a']==nullptr)
return ;
aparitii((*nod).fr[s[i]-'a'],i+1);
}
void maxi(trie* nod,int i){
if((*nod).prefix!=0)
r=i;
else
return ;
if(s[i]==0||(*nod).fr[s[i]-'a']==nullptr)
return ;
maxi((*nod).fr[s[i]-'a'],i+1);
}
signed main()
{
while(cin>>task>>s){
if(task==0)
add(root,0);
else if(task==1)
erase(root,0);
else{
r=0;
if(task==2)
aparitii(root,0);
else
maxi(root,0);
cout<<r<<'\n';
}
}
return 0;
}