Pagini recente » Cod sursa (job #2772510) | Cod sursa (job #587322) | Cod sursa (job #800380) | Cod sursa (job #1390978) | Cod sursa (job #1960356)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct trie
{
int cnt,nrfii;
trie *fiu[26];
trie()
{
cnt=nrfii=0;
memset(fiu,0,sizeof(fiu));
}
};
typedef trie *ptrie;
ptrie rad=new trie;
void ins(ptrie nod,char *s)
{
if( *s==0 ){
nod->cnt+=1;return ;
}
if(nod->fiu[*s-'a']==0)
{
nod->fiu[*s-'a']=new trie;
nod->nrfii+=1;
}
ins(nod->fiu[*s-'a'],s+1);
}
int del(ptrie nod,char *s)
{
if(*s==0)
nod->cnt--;
else
if(del(nod->fiu[*s-'a'],s+1))
{
nod->fiu[*s-'a' ] = 0;
nod->nrfii--;
}
if(nod->cnt==0 and nod!=rad and nod->nrfii==0)
{
delete nod;return 1;
}
return 0;
}
int que(ptrie nod,char *s)
{
if(*s==0)
return nod->cnt;
if(nod->fiu[*s-'a'])
return que(nod->fiu[*s-'a'],s+1);
return 0;
}
int pre(ptrie nod,char *s,int k)
{
if(*s==0 or !nod->fiu[*s-'a'])
return k;
return pre(nod->fiu[*s-'a'],s+1,k+1);
}
int main()
{
char s[30];
int a;
while(f>>a)
{
f>>s;
if(a==0)
ins(rad,s);
else
if(a==1)
del(rad,s);
else
if(a==2)
g<<que(rad,s)<<'\n';
else
g<<pre(rad,s,0)<<'\n' ;
}
return 0;
}