Pagini recente » Cod sursa (job #1392074) | Cod sursa (job #1406846) | Cod sursa (job #2064381) | Cod sursa (job #3189343) | Cod sursa (job #2197065)
#include <cstdio>
#include <cstring>
#define C (*s-'a')
using namespace std;
struct trie
{
int cnt,nrfii;
trie *fiu[26];
}*T;
char linie[40];
int cerinta;
void ins(trie *nod,char *s)
{
if(*s=='\n')
{
nod->cnt++;
return;
}
if(nod->fiu[C]==NULL)
{
nod->fiu[C]=new trie;
nod->nrfii++;
}
ins(nod->fiu[C],s+1);
}
int sterg(trie *nod,char *s)
{
if(*s=='\n')
{
nod->cnt--;
}
if(del(nod->fiu[C],s+1))
{
nod->nrfii--;
nod->fiu[C]=0;
}
if(nod->cnt==0 &&nod->nrfii==0&& nod!=T){
delete nod;return 1;}
return 0;
}
int numar(trie *nod,char *s)
{
if(*s=='\n') return nod->cnt;
if(nod->fiu[C]) return numar(nod->fiu[C],s+1);
return 0;
}
int pref(trie *nod,char *s,int k)
{
if(*s=='\n'||nod->fiu[C]==NULL)
return k;
pref(nod->fiu[C],s+1,k+1);
}
int main()
{
freopen("trie.in","r",f);
freopen("trie.out","w",g);
fgets(line,40,f);
T=new trie;
while(!feof(f))
{
cerinta=linie[0]-'a';
if(cerinta==0) ins(T,linie+2);
if(cerinta==1) sterg(T,linie+2);
if(cerinta==2) printf("%d\n",numar(T,linie+2));
if(cerinta==3) printf("%d\n",pref(T,linie+2,0));
}
return 0;
}