Pagini recente » Cod sursa (job #2988723) | Cod sursa (job #2556361) | Cod sursa (job #629657) | Cod sursa (job #636911) | Cod sursa (job #1764605)
#include<fstream>
#include<string.h>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
int n,i;
char s[255];
struct trie{
int nr,pref;
trie *urm[27];
}*nod;
void insereaza(){
int i,l,j,k;
trie *q,*w;
l=strlen(s);
q=nod;
for (i=0;i<l;i++){
j=s[i]-'a';
if (q->urm[j]!=0) {
q=q->urm[j];
q->pref++;
}
else{
w=new trie;
w->nr=0;w->pref=1;
for (k=0;k<=25;k++)
w->urm[k]=0;
q->urm[j]=w;
q=w;
}
}
q->nr++;
q->pref++;
}
void sterge(){
int i,l,j,k;
trie *q;
q=nod;
l=strlen(s);
for (i=0;i<l;i++){
j=s[i]-'a';
q=q->urm[j];
q->pref--;
}
q->nr--;
q->pref--;
}
int nrap(){
int i,l,j,k;
trie *q;
q=nod;
l=strlen(s);
for (i=0;i<l;i++){
j=s[i]-'a';
if (q->urm[j]==0){
return 0;
}
q=q->urm[j];
}
return q->nr;
}
int prefix(){
int i,l,j,val;
val=0;
trie *q;
q=nod;
for (i=0;i<l;i++){
j=s[i]-'a';
if (q->urm[j]==0) return val;
val++;
q=q->urm[j];
if (q->pref==0) return val-1;
}
return val;
}
int main(){
nod=new trie;
nod->nr=0;nod->pref=0;
for (i=0;i<=25;i++)
nod->urm[i]=0;
while(fin>>n>>s){
if (n==0) insereaza();
if (n==1) sterge();
if (n==2) fout<<nrap()<<'\n';
if (n==3) fout<<prefix()<<'\n';
}
fin.close();
fout.close();
return 0;
}