Pagini recente » Cod sursa (job #487391) | Cod sursa (job #1812309) | Cod sursa (job #204978) | Cod sursa (job #1948565) | Cod sursa (job #2065813)
#include<fstream>
#include<iostream>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
int type;
char a[25];
struct trie
{
int nra=0,nrc=0;
struct trie *urm[27]={0};
};
trie *t=new trie;
void inserare(trie *nod,char *s)
{
if(*s==0)
{
nod->nra++;
return;
}
if(nod->urm[*s-'a']==0)
{
nod->urm[*s-'a']=new trie;
nod->nrc++;
}
inserare(nod->urm[*s-'a'],s+1);
}
int del(trie *nod,char *s)
{
if(*s==0)
nod->nra--;
else
if(del(nod->urm[*s-'a'],s+1))
{
nod->nrc--;
nod->urm[*s-'a']=0;
}
if(nod->nrc==0&&nod->nra==0&&nod!=t)
{
delete nod;
return 1;
}
return 0;
}
int apcuv(trie *nod,char *s)
{
if(*s==0)
return nod->nra;
if(nod->urm[*s-'a'])
return apcuv(nod->urm[*s-'a'],s+1);
return 0;
}
int prefix(trie *nod,char *s,int k)
{
if(*s==0||nod->urm[*s-'a']==0)
return k;
return prefix(nod->urm[*s-'a'],s+1,k+1);
}
int main()
{
while(fin>>type)
{
fin>>a;
if(type==0)
inserare(t,a);
if(type==1)
del(t,a);
if(type==2)
fout<<apcuv(t,a)<<'\n';
if(type==3)
fout<<prefix(t,a,0)<<'\n';
}
}