Pagini recente » Cod sursa (job #867610) | Cod sursa (job #22230) | Cod sursa (job #2268720) | Cod sursa (job #2804811) | Cod sursa (job #716978)
Cod sursa(job #716978)
#include<stdio.h>
#include<string.h>
using namespace std;
struct trie{ int nr_cuv;
int nr_fii;
trie *lit[26];
trie(){ nr_cuv=0; nr_fii=0;
memset(lit,0,sizeof(lit));}
};
trie *T=new trie;
void inserare(char s[21])
{ int i=0;
trie *t=T;
while(i<=strlen(s))
{ if (i==strlen(s))
{ t->nr_cuv++; return; }
if(t->lit[s[i]-'a']!=0)
{ t->nr_fii++; t=t->lit[s[i]-'a']; i++; }
else
if(t->lit[s[i]-'a']==0)
{t->lit[s[i]-'a']=new trie; t->nr_fii++; t=t->lit[s[i]-'a']; i++; }
}
}
void stergere(char s[21])
{ int i=0;
trie *t=T;
while(i<=strlen(s))
{ if(i==strlen(s) && t->nr_cuv>=0)
{ t->nr_cuv--; return;}
if(t->lit[s[i]-'a']!=0)
{ t->nr_fii--; t=t->lit[s[i]-'a']; i++; }
}
}
void numar_aparitii(char s[21])
{ int i=0;
trie *t=T;
while(i<=strlen(s))
{ if (i==strlen(s))
{ printf("%d\n",t->nr_cuv); return ;}
if (t->lit[s[i]-'a']!=0)
{ t=t->lit[s[i]-'a']; i++; }
else
{ printf("0\n"); return;}
} }
void prefix(char s[21])
{ int i=0,pref=0;
trie *t=T;
while(i<=strlen(s))
{ if(i==strlen(s))
{ printf("%d",strlen(s)); return; }
if(t->lit[s[i]-'a']==0)
{ printf("%d\n",pref); return ;}
if(t->lit[s[i]-'a']!=0)
{t=t->lit[s[i]-'a'];
if (t->nr_fii==0 && t->nr_cuv==0 )
{ printf("%d\n",i); return;}
else
{ i++; pref=i;}
}
else
{ printf("%d\n",pref); return ;}
}}
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
int op; char s[21];
scanf("%d%s",&op,&s);
while(!feof(stdin))
{ if(op==0)
inserare(s);
else
if(op==1)
stergere(s);
else
if(op==2)
numar_aparitii(s);
else
prefix(s);
scanf("%d%s",&op,&s);
}
return 0;
}