Pagini recente » Cod sursa (job #2390113) | Cod sursa (job #978174) | Cod sursa (job #2642973) | Cod sursa (job #52803) | Cod sursa (job #1898959)
#include <algorithm>
#include <fstream>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
int x , k;
char s[25];
struct Trie
{
int info,co;
Trie *a[30];
} *p,*q,*inc;
void add()
{
for(int i = 0; s[i]; i++)
{
if(!p -> a[s[i] - 'a'])
{
q = new Trie();
p -> a[s[i] - 'a'] = q;
p = q;
}
else p = p -> a[s[i] - 'a'];
p -> co++;
}
p -> info++;
}
void del()
{
for(int i = 0; s[i]; i++)
{
p = p -> a[s[i] - 'a'];
p -> co--;
}
p -> info--;
}
void write()
{
int i;
for(i = 0; s[i]; i++)
if(p -> a[s[i] - 'a'])p = p -> a[s[i] - 'a'];
else break;
if(!s[i])fout << (p -> info) << '\n';
else fout << 0 << '\n';
}
void prefix()
{
int i;
k = 0;
for(i = 0; s[i]; i++)
if(p -> a[s[i] - 'a'] && p -> co)p = p -> a[s[i] - 'a'];
else break;
if(!p -> co)i--;
fout << i << '\n';
}
int main ()
{
inc = new Trie();
inc -> co = 1;
while(fin >> x >> s)
{
p = inc;
if(x == 0) add();
else if(x == 1) del();
else if(x == 2) write();
else prefix();
}
}