Pagini recente » Cod sursa (job #464531) | Cod sursa (job #968966) | Cod sursa (job #2446764) | Cod sursa (job #2470007) | Cod sursa (job #2921369)
#include<bits/stdc++.h>
using namespace std;
string numeFisier="trie";
ifstream Fin(numeFisier+".in"); ofstream fout(numeFisier+".out");
#define cin Fin
#define cout fout
#define INIT ios_base :: sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define mp make_pair
#define pb push_back
#define ft first
#define sc second
#define ll long long
#define pii pair<int, int>
#define count_bits __builtin_popcount
//#define int ll
int cnt[2000200];
int en[2000200];
int trie[2000200][26];
int fin;
void add(string s){
int cr=0;
for(int i=0; i<s.length(); i++){
if(trie[cr][s[i]-'a' ]==0){
fin++;
trie[cr][s[i]-'a' ]=fin;
//cr=fin;
}
cr=trie[cr][s[i]-'a' ];
cnt[cr]++;
}
en[cr]++;
}
void del(string s){
int cr=0;
for(int i=0; i<s.length(); i++){
cr=trie[cr][s[i]-'a' ];
cnt[cr]--;
}
en[cr]--;
}
int app(string s){
int cr=0;
int res=1e9;
for(int i=0; i<s.length(); i++){
if(trie[cr][s[i]-'a' ]==0){
cr=0;
res=0;
break;
}
cr=trie[cr][s[i]-'a' ];
//res=min(res, cnt[cr]);
}
if(cr!=0){
res = en[cr];
}
else{
res=0;
}
return res;
}
int pref(string s){
int res=0;
int cr=0;
for(int i=0; i<s.length(); i++){
if( (trie[cr][s[i]-'a' ]==0) ){
//res=0;
break;
}
cr=trie[cr][s[i]-'a' ];
if(cnt[cr]==0){
//res=0;
break;
}
res++;
}
return res;
}
int32_t main(){
INIT
int tp;
string s;
while(cin>>tp){
cin>>s;
switch(tp){
case 0:{
add(s);
break;
}
case 1:{
del(s);
break;
}
case 2:{
cout<<app(s)<<"\n";
break;
}
case 3:{
cout<<pref(s)<<"\n";
break;
}
}
}
return 0;
}