Pagini recente » Cod sursa (job #263900) | Cod sursa (job #1654541) | Cod sursa (job #2887004) | Cod sursa (job #295742) | Cod sursa (job #2139271)
#include <bits/stdc++.h>
#define cod(x) x-'a'
using namespace std;
ifstream in("trie.in");
ofstream out("trie.out");
const int nx=100002;
int op,lg,pref;
char s[260];
struct trie
{
int pref;
int cuv;
trie *next[27];
trie()
{
pref=0;
cuv=0;
memset(next,0,sizeof(next));
}
};
trie *root= new trie;
void ins(int poz, trie *t)
{
if(!t->next[cod(s[poz])])
t->next[cod(s[poz])]=new trie;
t=t->next[cod(s[poz])];
t->pref++;
if(poz==lg-1)
t->cuv++;
else
ins(poz+1,t);
}
void del (int poz, trie *t)
{
t=t->next[cod(s[poz])];
t->pref--;
if(poz==lg-1)
t->cuv--;
else
del(poz+1,t);
}
int nr_cuv (int poz, trie *t)
{
if(!t->next[cod(s[poz])]) return 0;
t=t->next[cod(s[poz])];
if(poz==lg-1)
return t->cuv;
else
nr_cuv(poz+1,t);
}
void max_pref( int poz, trie *t)
{
if(!t->next[cod(s[poz])]) return ;
t=t->next[cod(s[poz])];
if(t->pref>=1)
pref++;
else
return;
if(poz==lg-1)
return;
else
max_pref(poz+1,t);
}
int main()
{
root= new trie;
while(in>>op>>s)
{
lg=strlen(s);
if(op==0)
ins(0,root);
else if(op==1)
del(0,root);
else if(op==2)
out<<nr_cuv(0,root)<<'\n';
else if(op==3)
{
pref=0;
max_pref(0,root);
out<<pref<<'\n';
}
}
return 0;
}