Pagini recente » Cod sursa (job #1655124) | Cod sursa (job #292496) | Cod sursa (job #200276) | Cod sursa (job #3232674) | Cod sursa (job #763545)
Cod sursa(job #763545)
#include <cstdio>
#include <cctype>
#include <algorithm>
using namespace std;
struct nod{
struct nod *f[26];
int nr,p; }*t;
void add(char *b){
nod *g = t;
int urm;
while(isalpha(*b))
{
urm = *b - 'a';
if(g->f[urm] == NULL) g->f[urm] = new nod;
g = g->f[urm];
g->p++; // adaugam o aparitie
b++; // urmatorul caracter
}
g->nr++; // adaugam un cuvint nou
}
void remove(char *b){
nod *g = t;
int urm;
while(isalpha(*b))
{
urm = *b - 'a';
g = g->f[urm];
g->p--; // stergem o aparitie
b++; // urmatorul caracter
}
g->nr--; //stergem un cuvint
}
int number(char *b){
nod *g = t;
int urm;
while(isalpha(*b))
{
urm = *b - 'a';
if(g->f[urm] == NULL) return 0;
g = g->f[urm];
b++; // urmatorul caracter
}
return g->nr;
}
int prefix(char *b){
nod *g = t;
int urm, l = 0;
while(isalpha(*b))
{
urm = *b - 'a';
if(g->f[urm] == NULL) break;
g = g->f[urm];
if(g->p < 1) break;
b++; // urmatorul caracter
l++;
}
return l;
}
int main(){
int c;
char a[30];
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
t = new nod; // cream structura trie.
while(scanf("%d %s ",&c,a)!=-1)
{
switch(c){
case 0: add(a); break;
case 1: remove(a); break;
case 2: printf("%d\n",number(a)); break;
case 3: printf("%d\n",prefix(a)); break;
}
}
return 0;
}