Pagini recente » Cod sursa (job #1354963) | Monitorul de evaluare | Cod sursa (job #185488) | Cod sursa (job #280078) | Cod sursa (job #717475)
Cod sursa(job #717475)
#include <cstring>
#include <fstream>
using namespace std;
struct nod{
nod *v[26];
int fii;
int nr;
nod(){
fii=nr=0;
memset(v,0,sizeof(v) );
}
};
nod *T=new nod;
void adaug(nod *t,char *s){
if(!*s){
t->nr++;
return;
}
if(t->v[*s-'a']==0){
t->v[*s-'a']=new nod;
t->fii++;
}
adaug(t->v[*s-'a'],s+1);
}
int del(nod *t,char*s){
if (!*s)
t->nr--;
else
if (del(t->v[*s-'a'],s+1)){
t->v[*s-'a']=0;
t->fii--;
}
if (!t->nr && !t->fii && t!=T){
delete t; return 1;
}
return 0;
}
int query(nod *t, char *s){
if (!*s)
return t->nr;
if (t->v[*s-'a'])
return query(t->v[*s-'a'],s+1);
return 0;
}
int prefix(nod *t,char *s,int i){
if (!*s || !t->v[*s-'a'])
return i;
return prefix(t->v[*s-'a'],s+1,i+1);
}
int main ()
{
ifstream fin("trie.in");
ofstream fout("trie.out");
int op;
char c[21];
fin>>op>>c;
while(!fin.eof()){
if (op==0) adaug(T,c);
else if (op==1) del(T,c);
else if (op==2) fout<<query(T,c)<<endl;
else if (op==3) fout<<prefix(T,c,0)<<endl;
fin>>op>>c;
}
fin.close();
return 0;
}