Pagini recente » Cod sursa (job #2875504) | Cod sursa (job #2565866) | Cod sursa (job #2899770) | Cod sursa (job #127501) | Cod sursa (job #2414888)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct trie{
int nr = 0;
int nrf = 0;
trie *f[26];
trie(){
for(int i = 0; i < 26; i++){
f[i] = 0;
}
}
};
trie *rad = new trie;
int del(trie *p,char *s){
if(*s == '\n'){
p->nr--;
}else if(del(p->f[*s - 'a'],s+1)){
p->nrf--;
p->f[*s-'a'] = 0;
}
if(p != rad && p->nr == 0 && p->nrf == 0){
delete p; return 1;
}
return 0;
}
void ins(trie *p,char *s){
if(*s == '\n'){
p->nr++; return;
}
if(p->f[*s - 'a'] == 0){
p->f[*s - 'a'] = new trie;
p->nrf++;
}
ins(p->f[*s-'a'],s+1);
}
int nrap(trie *p,char *s){
if(*s == '\n'){
return p->nr;
}
if(p->f[*s-'a']){
return nrap(p->f[*s-'a'],s+1);
}
return 0;
}
int prefm(trie *p,char *s){
if(p->f[*s-'a'] == 0 || *s == '\n'){
return 0;
}
return prefm(p->f[*s-'a'],s+1) + 1;
}
int main()
{
int i,aux;
char s[26];
while(!fin.eof()){
fin.getline(s,26);
s[strlen(s)+1]='\0';
s[strlen(s)] = '\n';
if(s[0] == '0'){
ins(rad,s+2);
}else if(s[0] == '1'){
del(rad,s+2);
}else if(s[0] == '2'){
fout<<nrap(rad,s+2)<<endl;;
}else if(s[0] == '3'){
fout<<prefm(rad,s+2)<<endl;
}
}
return 0;
}