Pagini recente » Cod sursa (job #813287) | Cod sursa (job #421647) | Cod sursa (job #1424993) | Cod sursa (job #813420) | Cod sursa (job #1153225)
#include <fstream>
#include <cstring>
using namespace std;
struct Nod
{
int fr,nrfii;
Nod *leg[26];
Nod()
{
fr=nrfii=0;
for(int i=0;i<26;++i)
leg[i]=0;
}
};
Nod *rad,*tata;
char sir[25];
int lg;
inline void Insert(char sir[])
{
int k=0,len=strlen(sir),i;
Nod *p=rad,*q;
while(k<len && p!=0)
{
i=sir[k++]-'a';
q=p;
p=p->leg[i];
}
if(p)
p->fr++;
else
{
--k;
for(;k<len;++k)
{
i=sir[k]-'a';
p=new Nod;
q->leg[i]=p;
q->nrfii++;
q=p;
}
q->fr++;
}
}
inline Nod* Search(char sir[])
{
int k=0,i,len=strlen(sir);
lg=0;
Nod *p=rad;
while(k<len)
{
i=sir[k]-'a';
if(p->leg[i]==0)
return rad;
tata=p; p=p->leg[i];
if(p->fr>0 || p->nrfii>0)
lg=k+1;
++k;
}
if(p->fr>0)
return p;
return rad;
}
inline void Delete(char sir[])
{
Nod *p=Search(sir);
p->fr--;
if(p->fr==0)
tata->nrfii--;
}
int main()
{
int x;
Nod *p;
ifstream fin("trie.in");
ofstream fout("trie.out");
rad=new Nod;
while(fin>>x>>sir)
{
if(x==0)
Insert(sir);
else
if(x==1)
Delete(sir);
else
if(x==2)
{
p=Search(sir);
if(p==rad)
fout<<0<<"\n";
else
fout<<p->fr<<"\n";
}
else
{
Search(sir);
fout<<lg<<"\n";
}
}
return 0;
}