Pagini recente » Cod sursa (job #1527054) | Cod sursa (job #2340242) | Cod sursa (job #948567) | Cod sursa (job #948526) | Cod sursa (job #3041426)
///nu am mai scris trie de vreo luna
#include <fstream>
#include <string.h>
#include <string>
#include <map>
using namespace std;
ifstream cin ("trie.in");
ofstream cout ("trie.out");
const int N = 1e4;
struct trie
{
trie *v[30];
int f[30];
trie ()
{
memset (v, 0, sizeof(v));
memset (f, 0, sizeof(f));
}
};
trie * head = new trie();
map <string, int> m;
void addtrie (trie *head, char *s)
{
if (s == NULL)
return;
for (int i = 0; i < 26; ++i)
if ((*s - 'a') == i)
{
if (head->v[i] == NULL)
head->v[i] = new trie();
head->v[i]->f[i]++;
addtrie(head->v[i], (s + 1));
return;
}
}
void sterge (trie *head, char *s)
{
if (s == NULL)
return;
for (int i = 0; i < 26; ++i)
if ((*s - 'a') == i)
{
head->v[i]->f[i]--;
sterge (head->v[i], (s + 1));
return;
}
}
int prefix (trie *head, char *s)
{
if (s == NULL)
return 0;
for (int i = 0; i < 26; ++i)
if ((*s - 'a') == i)
{
if (head->v[i] != NULL && head->v[i]->f[i])
return 1 + prefix(head->v[i], (s + 1));
else
return 0;
}
}
int op;
char s[N + 1];
int main()
{
while (cin >> op >> s)
{
if (op == 0)
{
m[s]++;
addtrie(head, s);
}
if (op == 1)
{
m[s]--;
sterge (head, s);
}
if (op == 2)
{
cout << m[s] << '\n';
}
if (op == 3)
{
cout << prefix (head, s) << '\n';
}
}
return 0;
}