Pagini recente » Cod sursa (job #716111) | Cod sursa (job #2713816) | Cod sursa (job #1824270) | Cod sursa (job #878557) | Cod sursa (job #2664374)
#include <fstream>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
string s;
struct trienod{
int cnt, ne;
trienod *v[26];
trienod(){
cnt=0, ne=0;
for(int i=0;i<26;++i) v[i]=nullptr;
}
void add(int depth){
cnt++;
if(depth+1==s.size()){
ne++;
return;
}
char x=s[depth+1]-'a';
if(v[x]==nullptr) v[x]=new trienod();
v[x]->add(depth+1);
}
bool del(int depth){
cnt--;
if(depth+1==s.size()) return !cnt;
char x=s[depth+1]-'a';
if(v[x]->del(depth+1)){
delete v[x];
v[x]=nullptr;
}
return !cnt;
}
int srcf(int depth){
if(depth+1==s.size()) return ne;
char x=s[depth+1]-'a';
if(v[x]==nullptr) return 0;
return v[x]->srcf(depth+1);
}
int srcp(int depth){
if(depth+1==s.size()) return depth;
char x=s[depth+1]-'a';
if(v[x]==nullptr) return depth;
return v[x]->srcp(depth+1);
}
};
int main(){
int tip;
trienod *x=new trienod;
while(fin>>tip){
if(tip==EOF) return 0;
fin>>s;
if(tip==0) x->add(-1);
else if(tip==1) x->del(-1);
else if(tip==2) fout<<x->srcf(-1)<<"\n";
else fout<<x->srcp(-1)+1<<"\n";
}
return 0;
}