Pagini recente » Cod sursa (job #167669) | Cod sursa (job #550208) | Cod sursa (job #3275691) | Cod sursa (job #846407) | Cod sursa (job #759389)
Cod sursa(job #759389)
#include <cstdio>
#include <cctype>
#include <algorithm>
using namespace std;
struct nod{
struct nod*f[26];
int viz,cuv;
}*t;
char s[33];
void add(char *s){
nod *g=t;
int urm;
while(isalpha(*s))
{
urm=*s-'a';
if(g->f[urm]==0)g->f[urm]=new nod;
g=g->f[urm];
g->viz++;
s++; //trecem la urmatorul caracter din cuvint
}
g->cuv++;
}
void remove(char *s){
nod *g=t;
int urm;
while(isalpha(*s))
{
urm=*s-'a';
g=g->f[urm];
g->viz--;
s++;
}
g->cuv--;
}
int aparitii(char *s){
nod *g=t;
int urm;
while(isalpha(*s))
{
urm=*s-'a';
if(g->f[urm]==0)return 0;
g=g->f[urm];
s++;
}
return g->cuv;
}
int prefix(char *s){
nod *g=t;
int l=0,p=0,urm;
while(isalpha(*s))
{
urm=*s-'a';
if(g->f[urm]==0)break;
g=g->f[urm];
s++;
p++;
if(g->viz>0)l=p;
}
return l;
}
int main(){
int c;
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
t=new nod;
while(scanf("%d %s ",&c,s)!=-1)
{
switch(c){
case 0: add(s); break;
case 1: remove(s); break;
case 2: printf("%d\n",aparitii(s)); break;
case 3: printf("%d\n",prefix(s)); break;
}
}
return 0;
}