Pagini recente » Cod sursa (job #3239315) | Cod sursa (job #26109) | Cod sursa (job #799284) | Cod sursa (job #1657596) | Cod sursa (job #2197061)
#include <bits/stdc++.h>
#define CH (*s-'a')
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct trie
{
int cnt,nrfii;
trie *fiu[26];
trie()
{
cnt=nrfii=0;
memset(fiu,0,sizeof(fiu));
}
};
trie *t = new trie;
void ins(trie *nod,char *s)
{
if(*s=='\n')
{
nod->cnt++;
return;
}
if(nod->fiu[CH]==0)
{
nod->fiu[CH]=new trie;
nod->nrfii++;
}
ins(nod->fiu[CH],s+1);
}
int del(trie *nod,char *s)
{
if(*s=='\n')
nod->cnt--;
else if(del(nod->fiu[CH],s+1))
{
nod->fiu[CH]=0;
nod->nrfii--;
}
if(!nod->cnt&&!nod->nrfii&&nod!=t)
{
delete nod;
return 1;
}
return 0;
}
int que(trie *nod, char *s)
{
if(*s=='\n')
return nod->cnt;
if(nod->fiu[CH])
return que(nod->fiu[CH],s+1);
return 0;
}
int pre(trie *nod,char *s,int k)
{
if(*s=='\n'||nod->fiu[CH]==0)
return k;
return pre(nod->fiu[CH],s+1,k+1);
}
int x;
char c[100];
int main()
{
while(fin>>x)
{
fin>>c;
c[strlen(c)]='\n';
if(x==0)
{
ins(t,c);
}
else if(x==1)
{
del(t,c);
}
else if(x==2)
{
fout<<que(t,c)<<'\n';
}
else if(x==3)
{
fout<<pre(t,c,0)<<'\n';
}
}
return 0;
}