Pagini recente » Cod sursa (job #1473479) | Cod sursa (job #330720) | Cod sursa (job #867897) | Cod sursa (job #1004779) | Cod sursa (job #465066)
Cod sursa(job #465066)
#include<cstring>
#include<cstdio>
#include<cstdlib>
using namespace std;
struct trie
{
int v, p;
trie* next[26];
trie()
{
v = p = 0;
for (int i = 0; i < 26; ++i)
next[i] = 0;
}
};
trie *t = new trie;
void insert(char* cuv);
void erase(char* cuv);
void writen(char* cuv);
void writep(char* cuv);
int main()
{
freopen("trie.out", "w", stdout);
freopen("trie.in", "r", stdin);
char line[32];
fgets(line, 32, stdin);
while (!feof(stdin))
{
switch (line[0] - '0')
{
case 0:
insert(line + 2); break;
case 1:
erase(line + 2); break;
case 2:
writen(line + 2); break;
case 3:
writep(line + 2); break;
};
fgets(line, 32, stdin);
}
return 0;
}
void insert(char* cuv)
{
trie* aux = new trie;
aux = t;
for (int i = 0; i < (int)strlen(cuv) - 1; ++i)
{
if (aux->next[cuv[i] - 'a'] == 0)
{
trie *nod = new trie;
aux->next[cuv[i] - 'a'] = nod;
aux = nod;
}
else
{
aux = aux->next[cuv[i] - 'a'];
}
++aux->p;
}
++aux->v;
delete aux;
}
void erase(char* cuv)
{
trie* aux = new trie;
trie* array[21];
int j = 0;
aux = t;
for (int i = 0; i < (int)strlen(cuv) - 1; ++i)
{
aux = aux->next[cuv[i] - 'a'];
--aux->p;
array[j++] = aux;
}
--aux->v;
aux = t;
for (int i = 0; i < (int)strlen(cuv) - 1; ++i)
if (array[i]->p == 0)
{
array[i] = 0;
delete array[i];
}
delete aux;
}
void writen(char* cuv)
{
trie* aux = new trie;
aux = t;
for (int i = 0; i < (int)strlen(cuv) - 1; ++i)
if (aux->next[cuv[i] - 'a'] == 0)
{
printf("0\n");
return;
}
else
aux = aux->next[cuv[i] - 'a'];
printf("%d\n", aux->v);
delete aux;
}
void writep(char* cuv)
{
trie* aux = new trie;
aux = t;
int cont = 0, mx = 0;
for (int i = 0; i < (int)strlen(cuv) - 1; ++i)
{
++cont;
if (aux->next[cuv[i] - 'a'] == 0)
break;
else
aux = aux->next[cuv[i] - 'a'];
if (aux->p > 0)
mx = cont;
}
printf("%d\n", mx);
delete aux;
}