Pagini recente » Cod sursa (job #3168393) | Cod sursa (job #44689) | Cod sursa (job #1655599) | Cod sursa (job #2604604) | Cod sursa (job #2987999)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
int nod,n;
int i,j;
struct trie
{
int fr,nr;
trie* f[30];
trie()
{
memset(f, 0, sizeof f);
fr = nr = 0;
}
};
trie *T;
void Add(string s)
{
trie *x=T;
for(int i=0; i<s.size(); i++)
{
int y=s[i]-'a';
if(!x->f[y])
{
x->f[y]=new trie;
}
x=x->f[y];
x->nr++;
}
x->fr++;
}
void sterge(string s)
{
trie *x=T;
for(int i=0; i<s.size(); i++)
{
int y=s[i]-'a';
x=x->f[y];
x->nr--;
}
x->fr--;
}
int numaracuv(string s)
{
trie *x=T;
for(int i=0; i<s.size(); i++)
{
int y=s[i]-'a';
x=x->f[y];
}
return x->fr;
}
int prefix(string s)
{
trie *x=T;
int ok=0;
for(int i=0; i<s.size(); i++)
{
int y=s[i]-'a';
x=x->f[y];
ok++;
if(x->nr<=1)
break;
}
return ok;
}
int main()
{
int tip;
string s;
T=new trie;
while(fin>>tip>>s)
{//cout<<s;
fin.get();
if(tip==0)
{
Add(s);
}
else if(tip==1)
{
sterge(s);
}
else if(tip==2)
{
fout<<numaracuv(s);
fout<<'\n';
}
else
{
fout<<prefix(s);
fout<<'\n';
}
}
return 0;
}