Pagini recente » Cod sursa (job #2079155) | Cod sursa (job #3181247) | Cod sursa (job #444841) | Cod sursa (job #1471421) | Cod sursa (job #1585841)
#include<fstream>
using namespace std;
int op;
char s[22];
struct nod
{
int nr;
int nf;
nod *F[26];
nod()
{
nr=0;
nf=0;
for(int i=0; i<25; i++)
{
F[i]=0;
}
}
};
nod *rad;
void inserare(nod *p, char *s)
{
if(*s!=0)
{
if(p->F[*s-'a']==NULL)
{
p->F[*s-'a']=new nod;
p->nf++;
}
inserare(p->F[*s-'a'], s+1);
}else
{
p->nr++;
}
}
int aparitii(nod *p, char *s)
{
if(*s==0)
{
return p->nr;
}
if(p->F[*s-'a']==NULL)
return 0;
return aparitii(p->F[*s-'a'], s+1);
}
int prefix(nod *p, char *s)
{
if(*s==0)
{
return 0;
}
if(p->F[*s-'a']==NULL)
return 0;
return 1+prefix(p->F[*s-'a'], s+1);
}
int sterge(nod *p, char *s)
{
if(*s==0)
{
p->nr--;
if(p->nr==0 && p->nf==0)
{
delete p;
return 1;
}
return 0;
}
if(p->F[*s-'a']==NULL)
return 0;
if(sterge(p->F[*s-'a'], s+1)==0)
return 0;
p->F[*s-'a']=NULL;
p->nf--;
if(p->nr==0 && p->nf==0 && p!=rad)
{
delete p;
return 1;
}
return 0;
}
ifstream in("trie.in");
ofstream out("trie.out");
int main()
{
rad=new nod;
while(in>>op)
{
in>>s;
if(op==0)
{
inserare(rad, s);
continue;
}
if(op==1)
{
sterge(rad, s);
continue;
}
if(op==2)
{
out<<aparitii(rad, s)<<"\n";
continue;
}
if(op==3)
{
out<<prefix(rad, s)<<"\n";
continue;
}
}
return 0;
}