Pagini recente » Cod sursa (job #2328273) | Cod sursa (job #2593788) | Cod sursa (job #500761) | Cod sursa (job #2211966) | Cod sursa (job #3351724)
#include <fstream>
using namespace std;
ifstream cin("trie.in");
ofstream cout("trie.out");
int nextnodliber,max1;
string s;
struct strie{
int cnt=0,cntp=0;
int next[26]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
} trie[3000001];
void build_trie(int nod,int poz){
trie[nod].cntp++;
if(poz==s.size()){
trie[nod].cnt++;return;
}
if(trie[nod].next[s[poz]-'a']==-1){
trie[nod].next[s[poz]-'a']=nextnodliber;nextnodliber++;
}
build_trie(trie[nod].next[s[poz]-'a'],poz+1);
}
void scad_trie(int nod,int poz){
trie[nod].cntp--;
if(poz==s.size()){
trie[nod].cnt--;return;
}
if(trie[nod].next[s[poz]-'a']==-1){
trie[nod].next[s[poz]-'a']=nextnodliber;nextnodliber++;
}
scad_trie(trie[nod].next[s[poz]-'a'],poz+1);
}
int nr_trie(int nod,int poz){
if(poz==s.size()){
return trie[nod].cnt;
}
if(trie[nod].next[s[poz]-'a']==-1){
trie[nod].next[s[poz]-'a']=nextnodliber;nextnodliber++;
}
return nr_trie(trie[nod].next[s[poz]-'a'],poz+1);
}
void max_pref(int nod,int poz){
if(trie[nod].cntp) max1=max(max1,poz);
if(poz==s.size()){
return ;
}
if(trie[nod].next[s[poz]-'a']==-1){
trie[nod].next[s[poz]-'a']=nextnodliber;nextnodliber++;
}
max_pref(trie[nod].next[s[poz]-'a'],poz+1);
}
int main()
{
int cer;
while(cin>>cer){
cin>>s;
max1=-1;
if(cer==0) build_trie(0,0);
else if(cer==1) scad_trie(0,0);
else if(cer==2) cout<<nr_trie(0,0)<<"\n";
else{
max_pref(0,0);
cout<<max1<<"\n";
}
}
return 0;
}