Pagini recente » Cod sursa (job #2025980) | Cod sursa (job #2135693) | Cod sursa (job #777711) | Cod sursa (job #2086548) | Cod sursa (job #2171432)
#include<fstream>
#include<cmath>
#include<iomanip>
#include<algorithm>
#define DN 305
#define x first
#define y second
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
int type;
char a[25];
struct trie
{
int nra=0,nrc=0;
trie *c[27]={0};
};
trie *t=new trie;
void inserare(trie *nod,char *p)
{
if(*p==0)
{
nod->nra++;
return;
}
if(nod->c[*p-'a']==0)
{
nod->nrc++;
nod->c[*p-'a']=new trie;
}
inserare(nod->c[*p-'a'],p+1);
}
int del(trie *nod,char *p)
{
if(*p==0)
nod->nra--;
else
if(del(nod->c[*p-'a'],p+1))
{
nod->c[*p-'a']=0;
nod->nrc--;
}
if(nod!=t&&nod->nrc==0&&nod->nra==0)
{
delete nod;
return 1;
}
return 0;
}
int nrap(trie *nod,char *p)
{
if(*p==0)
return nod->nra;
if(nod->c[*p-'a'])
return nrap(nod->c[*p-'a'],p+1);
return 0;
}
int prefix(trie *nod,char *p,int r)
{
if(*p==0||nod->c[*p-'a']==0)
return r;
return prefix(nod->c[*p-'a'],p+1,r+1);
}
int main()
{
while(fin>>type>>a)
{
if(type==0)
inserare(t,a);
if(type==1)
del(t,a);
if(type==2)
fout<<nrap(t,a)<<'\n';
if(type==3)
fout<<prefix(t,a,0)<<'\n';
}
}