Pagini recente » Cod sursa (job #739769) | Cod sursa (job #739766) | Cod sursa (job #1750282) | Cod sursa (job #739712) | Cod sursa (job #735145)
Cod sursa(job #735145)
#include <cstdio>
#include <cctype>
struct arb{ int n,p; struct arb*f[27]; }*a;
char s[40];
void add(char*g){
arb*b=a;
int urm;
while(isalpha(*g)){
urm=*g-'a';
if(b->f[urm]==0){b->f[urm]=new arb;b->f[urm]->n=0;b->f[urm]->p=0;}
b=b->f[urm];
b->p++;
g++; }
b->n++;
}
void remove(char*g){
arb*b=a;
int urm;
while(isalpha(*g)){
urm=*g-'a';
b=b->f[urm];
b->p--;
g++; }
b->n--;
}
int full(char*g){
arb*b=a;
int urm;
while(isalpha(*g)){
urm=*g-'a';
if(b->f[urm]==0)return 0;
b=b->f[urm];
g++; }
return b->n;
}
int dmax(char*g){
arb*b=a;
int urm,m=0,i=0;
while(isalpha(*g)){
urm=*g-'a';i++;
if(b->f[urm]==0)return m;
b=b->f[urm];
if(b->p>0)m=i;
g++; }
return m;
}
int main(){
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
a=new arb;
while(fgets(s,30,stdin)){
switch(s[0]-'0'){
case 0: add(s+2); break;
case 1: remove(s+2); break;
case 2: printf("%d\n",full(s+2)); break;
case 3: printf("%d\n",dmax(s+2)); break; }
}
}