Pagini recente » Cod sursa (job #1412326) | Cod sursa (job #2566799) | Cod sursa (job #1457215) | Cod sursa (job #214650) | Cod sursa (job #1958921)
#include <cstdio>
using namespace std;
int t;
char cuv[30];
struct trie
{
int cnt, nrfii;
trie *fiu[26];
trie()
{
cnt = nrfii = 0;
for(int i = 0; i < 26; ++i)
fiu[i] = NULL;
}
} *rad;
trie *insert(trie *act, char v[])
{
if(act == NULL)
act = new trie;
act->cnt++;
if(v[0] == 0)
{
act->nrfii++;
return act;
}
act->fiu[v[0] - 'a'] = insert(act->fiu[v[0] - 'a'], v+1);
return act;
}
trie *erase(trie *act, char v[])
{
act->cnt--;
if(v[0] == 0)
{
act->nrfii--;
if(act->cnt == 0)
{
delete act;
act = NULL;
}
return act;
}
if(act->cnt == 0)
{
delete act;
act = NULL;
}
act->fiu[v[0] - 'a'] = erase(act->fiu[v[0] - 'a'], v+1);
return act;
}
int search(trie *act, char v[])
{
if(act == NULL)
return 0;
if(v[0] == 0)
return act->nrfii;
return search(act->fiu[v[0] - 'a'], v+1);
}
int len_pref(trie *act, char v[])
{
if(act == NULL)
return -1;
if(v[0] == 0)
return 0;
int val = len_pref(act->fiu[v[0] - 'a'], v+1);
return 1+val;
}
int main()
{
freopen("trie.in", "r", stdin);
freopen("trie.out", "w", stdout);
while(scanf("%d ", &t) != EOF)
{
gets(cuv);
if(t == 0)
rad = insert(rad, cuv);
else if(t == 1)
rad = erase(rad, cuv);
else if(t == 2)
printf("%d\n", search(rad, cuv));
else
printf("%d\n", len_pref(rad, cuv));
}
return 0;
}