Pagini recente » Cod sursa (job #2029426) | Cod sursa (job #1151772) | Cod sursa (job #217941) | Cod sursa (job #2104917) | Cod sursa (job #1729319)
#include<bits/stdc++.h>
#define T(x) (s[x]-'a')
using namespace std;
ifstream in("trie.in");
ofstream out("trie.out");
struct trie
{
int pre, cuv;
trie *a[26];
trie()
{
pre=cuv=0;
memset(a,0,sizeof(a));
}
};
trie *root = new trie();
void add(string s)
{
trie *p = root;
for(int i=0;i<s.size();++i)
{
if (!p->a[T(i)])
p->a[T(i)]=new trie;
p=p->a[T(i)];
p->pre++;
}
++p->cuv;
}
void del(string s)
{
trie *p=root;
for(int i=0;i<s.size();++i)
{
p=p->a[T(i)];
--p->pre;
}
--p->cuv;
}
int query(string s)
{
trie *p=root;
for(int i=0;i<s.size();++i)
{
if(p->a[T(i)])
p=p->a[T(i)];
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[T(i)])
return sol;
p=p->a[T(i)];
if(p->pre)
++sol;
}
return sol;
}
string s;
int x;
int main()
{
while (in >> x >> s)
{
if (!x) add(s);
if (x == 1) del(s);
if (x == 2) out << query(s) << "\n";
if (x == 3) out << pre(s) << "\n";
}
return 0;
}