Pagini recente » Cod sursa (job #3293435) | Cod sursa (job #2071822) | Cod sursa (job #3199190) | Cod sursa (job #917556) | Cod sursa (job #2664356)
#include <fstream>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
string s;
struct trienod{
int cnt;
char depth;
trienod *v[27];
trienod(){
cnt=0;
for(int i=0;i<=26;++i) v[i]=nullptr;
}
void add(int depth){
cnt++;
if(depth==s.size()) return;
char x;
if(depth+1==s.size()) x=0;
else x=s[depth+1]-'a'+1;
if(v[x]==nullptr) v[x]=new trienod();
v[x]->add(depth+1);
}
bool del(int depth){
cnt--;
if(depth==s.size()) return !cnt;
char x;
if(depth+1==s.size()) x=0;
else x=s[depth+1]-'a'+1;
if(v[x]->del(depth+1)){
delete v[x];
v[x]=nullptr;
}
return !cnt;
}
int srcf(int depth){
if(depth==s.size()) return cnt;
char x;
if(depth+1==s.size()) x=0;
else x=s[depth+1]-'a'+1;
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'+1;
if(v[x]==nullptr) return depth;
return v[x]->srcp(depth+1);
}
};
int main(){
int tip;
trienod x;
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;
}