Pagini recente » Cod sursa (job #710412) | Cod sursa (job #1171533) | Cod sursa (job #2407083) | Cod sursa (job #2146317) | Cod sursa (job #2416525)
#include <bits/stdc++.h>
using namespace std;
struct trie
{
int nrcuv,nr;
vector<int> v;
trie()
{
nrcuv=nr=0;
v.resize(26);
}
};
vector<trie> arb;
int l;
char sir[22];
void update()
{
int nod=0;
for(int i=1;i<=l;i++)
{
if(arb[nod].v[sir[i]-'a']==0)
{
arb.push_back(trie());
arb[nod].v[sir[i]-'a']=arb.size()-1;
}
nod=arb[nod].v[sir[i]-'a'];
arb[nod].nr++;
}
arb[nod].nrcuv++;
}
void trie_del()
{
int nod=0;
for(int i=1;i<=l;i++)
{
nod=arb[nod].v[sir[i]-'a'];
arb[nod].nr--;
}
arb[nod].nrcuv--;
}
int nr_cuv()
{
int nod=0;
for(int i=1;i<=l;i++)
{
nod=arb[nod].v[sir[i]-'a'];
if(arb[nod].nr==0) return 0;
}
return arb[nod].nrcuv;
}
int lcp()
{
int nod=0;
for(int i=1;i<=l;i++)
{
nod=arb[nod].v[sir[i]-'a'];
if(arb[nod].nr==0) return i-1;
}
return l;
}
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
int t;
arb.push_back(trie());
while(!feof(stdin))
{
scanf("%d %s\n",&t,sir+1);
l=strlen(sir+1);
if(!t) update();
else if(t==1) trie_del();
else if(t==2) printf("%d\n",nr_cuv());
else printf("%d\n",lcp());
}
return 0;
}