Pagini recente » Cod sursa (job #380705) | Cod sursa (job #1725972) | Cod sursa (job #1508723) | Cod sursa (job #2286887) | Cod sursa (job #2079164)
#include<fstream>
#include<vector>
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
char x[35];
int p;
struct trie
{
int nrc=0,nra=0;
trie *c[29]={0};
};
trie *t=new trie;
void inserare(trie *nod,char *s)
{
if(*s==0)
{
nod->nra++;
return;
}
if(!nod->c[*s-'a'])
{
nod->nrc++;
nod->c[*s-'a']=new trie;
}
inserare(nod->c[*s-'a'],s+1);
}
int del(trie *nod,char *s)
{
if(*s==0)
nod->nra--;
else
if(del(nod->c[*s-'a'],s+1))
{
nod->c[*s-'a']=0;
nod->nrc--;
}
if(nod->nrc==0&&nod!=t)
{
delete nod;
return 1;
}
return 0;
}
int nrap(trie *nod,char *s)
{
if(*s==0)
return nod->nra;
if(nod->c[*s-'a'])
return nrap(nod->c[*s-'a'],s+1);
return 0;
}
int prefix(trie *nod,char *s,int k)
{
if(*s==0||!nod->c[*s-'a'])
return k;
return prefix(nod->c[*s-'a'],s+1,k+1);
}
int main()
{
while(fin>>p)
{
fin>>x;
if(p==0)
inserare(t,x);
if(p==1)
del(t,x);
if(p==2)
{
fout<<nrap(t,x);
fout<<'\n';
}
if(p==3)
{
fout<<prefix(t,x,0);
fout<<'\n';
}
}
}