Pagini recente » Cod sursa (job #3345146) | Cod sursa (job #994487) | Cod sursa (job #617095) | Cod sursa (job #3336159) | Cod sursa (job #3340408)
#include <iostream>
#include <vector>
#include <string>
using namespace std;
struct nod{
int frec[26]={},cnt=0,nr=0;
};
int n,x,y;
vector<nod>v(1);
string w;
void insert(string s){
int y=0;
for(int i=0;i<s.size();++i){
if(!v[y].frec[s[i]-'a']){
v[y].frec[s[i]-'a']=v.size();
v.emplace_back();
}
y=v[y].frec[s[i]-'a'];
v[y].nr++;
}
v[y].cnt++;
}
void erase(string s){
int y=0;
for(int i=0;i<s.size();++i){
y=v[y].frec[s[i]-'a'];
v[y].nr--;
}
v[y].cnt--;
y=0;
for(int i=0;i<s.size();++i){
if(v[v[y].frec[s[i]-'a']].nr==0) {
v[y].frec[s[i]-'a']=0;
return;
}
y=v[y].frec[s[i]-'a'];
}
}
int count( string s){
int y=0;
for(int i=0;i<s.size();++i){
if(v[y].frec[s[i]-'a']){
y=v[y].frec[s[i]-'a'];
}
else return 0;
}
return v[y].cnt;
}
int pref( string s){
int y=0,lg=0;
for(int i=0;i<s.size();++i){
if(!v[y].frec[s[i]-'a']) return lg;
y=v[y].frec[s[i]-'a'];
lg++;
}
return lg;
}
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0);
//insert("abcd");
//for(auto it: v){
// cout<<it.nr<<' '<<it.cnt<<'\n';
//}
while(cin>>x>>w){
if(x==0){
insert(w);
}
else if(x==1){
erase(w);
}
else if(x==2){
cout<<count(w)<<'\n';
}
else if(x==3){
cout<<pref(w)<<'\n';
}
}
return 0;
}