Pagini recente » Cod sursa (job #2431966) | Cod sursa (job #1560228) | Cod sursa (job #1932172) | Cod sursa (job #1117653) | Cod sursa (job #1691461)
#include<fstream>
#include<string>
#include<string.h>
#define f(X) X-48
using namespace std;
ifstream cin("trie.in");
ofstream cout("trie.out");
struct trie
{
int pre, cuv;
trie *a[26];
trie()
{
pre = 0;
cuv = 0;
memset(a, 0, sizeof(a));
}
};
trie * root = new trie();
void insert(string s)
{
trie *p = root;
for (int i = 0; i < s.size(); ++i)
{
if (!p->a[s[i] - 'a']) p->a[s[i] - 'a'] = new trie();
p = p->a[s[i] - 'a'];
p->pre++;
}
++p->cuv;
}
void del(string s)
{
trie *p = root;
for (int i = 0; i < s.size(); ++i)
{
p = p->a[s[i] - 'a'];
--p->pre;
}
--p->cuv;
}
int query(string s)
{
trie *p = root;
for (int i = 0; i < s.size(); ++i)
{
if (p->a[s[i] - 'a']) p = p->a[s[i] - 'a'];
else
return 0;
}
return p->cuv;
}
int pre(string s)
{
trie *p = root;
int sol = 0;
for (int i = 0; i < s.size(); ++i)
{
if (!p->a[s[i] - 'a']) return sol;
p = p->a[s[i] - 'a'];
if (p->pre) sol = i + 1;
}
return sol;
}
string s;
int x;
int main()
{
while (cin >> x >> s)
{
if (!x) insert(s);
if (x == 1) del(s);
if (x == 2) cout << query(s) << "\n";
if (x == 3) cout << pre(s) << "\n";
}
return 0;
}