Pagini recente » Cod sursa (job #256479) | Cod sursa (job #123363) | Cod sursa (job #1087918) | Cod sursa (job #897784) | Cod sursa (job #2509506)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("trie.in");
ofstream out("trie.out");
char c[27];
int n;
struct trie
{
int cuv,nrfii;
trie* fii[26];
trie()
{
cuv=nrfii=0;
for(int i=0;i<26;i++)
{
fii[i]=NULL;
}
}
};
trie *t;
void adaug(char *s,trie *&nod)
{
if(nod==NULL)
nod=new trie();
if(*s==0)
nod->cuv++;
else
{
nod->nrfii++;
adaug(s+1,nod->fii[*s-'a']);
}
}
int sterg(char *s,trie *&nod)
{
if(*s==0)
nod->cuv--;
else
{
sterg(s+1,nod->fii[*s-'a']);
nod->nrfii--;
}
if(nod->cuv + nod->nrfii==0)
{
delete (nod);
nod=NULL;
}
}
int apar(char *s,trie *&nod)
{
if(nod==NULL)return 0;
if(*s==0)return nod->cuv;
else return apar(s+1,nod->fii[*s-'a']);
}
int pref(char *s,trie *&nod)
{
if(nod==NULL)
return -1;
if(*s==0)
return 0;
return pref(s+1,nod->fii[*s-'a'])+1;
}
int main()
{
t=new trie;
while(in>>n>>c)
{
if(n==0)adaug(c,t);
if(n==1)sterg(c,t);
if(n==2)out<<apar(c,t)<<'\n';
if(n==3)out<<pref(c,t)<<'\n';
}
return 0;
}