Pagini recente » Cod sursa (job #714399) | Cod sursa (job #1126710) | Cod sursa (job #3036434) | Cod sursa (job #594242) | Cod sursa (job #846400)
Cod sursa(job #846400)
#include <stdio.h>
#include <algorithm>
#include <cmath>
#include <cctype>
#include <cstring>
#include <vector>
using namespace std;
#define Max 100001
struct dic{
struct dic *f[26];
int p,c;
dic(){ for(int i=0;i<26;i++)f[i]=NULL; p=c=0; } }*t;
void add(char *b)
{
dic *g=t;
int urm;
while( isalpha(*b) )
{
urm=*b-'a';
if(g->f[urm]==NULL)g->f[urm]=new dic;
g=g->f[urm];
g->p++;
b++;
}
g->c++;
}
void del(char *b)
{
dic *g=t;
int urm;
while( isalpha(*b) )
{
urm=*b-'a';
g=g->f[urm];
g->p--;
b++;
}
g->c--;
}
int cuv(char *b)
{
dic *g=t;
int urm;
while( isalpha(*b) )
{
urm=*b-'a';
if(g->f[urm]==NULL)return 0;
g=g->f[urm];
b++;
}
return g->c;
}
int pre(char *b)
{
dic *g=t;
int urm,l=0;
while( isalpha(*b) )
{
urm = *b-'a';
if(g->f[urm]==NULL)return l;
g=g->f[urm];
if(g->p==0)return l;
l++;
b++;
}
return l;
}
int main()
{
char s[25];
int op;
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
t=new dic;
while( scanf("%d %s ",&op,s) != -1)
{
switch(op){
case 0: add(s); break;
case 1: del(s); break;
case 2: printf("%d\n",cuv(s)); break;
case 3: printf("%d\n",pre(s)); break;
}
}
return 0;
}