Pagini recente » Cod sursa (job #1074166) | Cod sursa (job #1692171) | Cod sursa (job #8171) | Cod sursa (job #1539793) | Cod sursa (job #815077)
Cod sursa(job #815077)
#include<cstdio>
using namespace std;
struct trie
{
trie *N[26];
int S,C;
trie()
{
C=S=0;
for(int i=0;i<26;i++) N[i]=0;
}
};
trie *A,*R,*Q,*ST[100010],*X;
char line[33],*p;
int i,j;
void insertWord(char *cuv)
{
for(p=cuv,Q=R;*p;p++)
{
i=*p-'a';
if(!Q->N[i]) Q->N[i]=new trie;
Q=Q->N[i];
Q->S++;
}
Q->C++;
}
void deleteWord(char *cuv)
{
j=0;
for(p=cuv,Q=R;*p;p++)
{
i=*p-'a';
Q=Q->N[i];
ST[++j]=Q;
ST[j]->S--;
}
Q->C--;
for(;j;)
{
X=ST[j]; j--;
if(X->S==0)
{
ST[j]->N[cuv[j]-'a']=0;
delete X;
}
else break;
}
}
void writeAppearances(char *cuv)
{
for(p=cuv,Q=R;*p;p++)
{
i=*p-'a';
Q=Q->N[i];
if(!Q) break;
}
Q?printf("%d\n",Q->C):printf("0\n");
}
void writePrefix(char *cuv)
{
int lenght=0;
for(p=cuv,Q=R;*p;p++)
{
i=*p-'a';
Q=Q->N[i];
if(!Q) break;
lenght++;
}
printf("%d\n",lenght);
}
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
R=new trie;
fgets(line,32,stdin);
while(!feof(stdin))
{
switch(line[0]-'0')
{
case 0: {insertWord(line+2); break;}
case 1: {deleteWord(line+2); break;}
case 2: {writeAppearances(line+2); break;}
case 3: {writePrefix(line+2); break;}
}
fgets(line,32,stdin);
}
return 0;
}