Pagini recente » Sandbox (cutiuţa cu năsip) | Cod sursa (job #1335730)
#include<fstream>
#include<cstring>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
int tip;
char *p,sir[22];
struct trie{
int nr;
trie *fii[26];
trie(){
nr=0;
memset(fii,0,sizeof(fii));
}
};
trie *t;
inline void insereaza(trie *t,char *p)
{
if(*p==0)
{
t->nr++;
return ;
}
int l=*p-'a';
if(t->fii[l]==NULL)
t->fii[l]=new trie;
insereaza(t->fii[l],p+1);
}
inline void sterge(trie *t,char *p)
{
if(*p==0)
{
t->nr--;
if(t->nr==0)
delete t;
return ;
}
int l=*p-'a';
sterge(t->fii[l],p+1);
}
inline int nraparitii(trie *t,char *p)
{
if(*p==0)
return t->nr;
int l=*p-'a';
if(t->fii[l]==NULL)
return 0;
return nraparitii(t->fii[l],p+1);
}
inline int cmlprefix(trie *t,char *p)
{
if(*p==0)
return p-sir;
int l=*p-'a';
if(t->fii[l]==NULL)
return p-sir;
return cmlprefix(t->fii[l],p+1);
}
int main()
{
t=new trie;
while(f>>tip)
{
f>>sir;
p=sir;
if(tip==0)
insereaza(t,p);
if(tip==1)
sterge(t,p);
if(tip==2)
g<<nraparitii(t,p)<<'\n';
if(tip==3)
g<<cmlprefix(t,p)<<'\n';
}
return 0;
}