Pagini recente » Cod sursa (job #1167209) | Cod sursa (job #2571599) | Cod sursa (job #2937707) | Cod sursa (job #2344711) | Cod sursa (job #1642211)
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
struct str
{
int ap;
int sf;
int fiu[30];
}a[120010];
int type,maxp=1,res;
char ch[30];
vector<int> delq;
void add()
{
int len=strlen(ch);
int nod=1;
for(int i=0;i<len;i++)
{
if(a[nod].fiu[ch[i]-'a']==0)
{
if(!delq.empty())
{
a[nod].fiu[ch[i]-'a']=delq.back();
delq.pop_back();
}
else
{
maxp++;
a[nod].fiu[ch[i]-'a']=maxp;
}
}
nod=a[nod].fiu[ch[i]-'a'];
a[nod].ap++;
}
a[nod].sf++;
}
void del()
{
int len=strlen(ch);
int nod=1;
for(int i=0;i<len;i++)
{
nod=a[nod].fiu[ch[i]-'a'];
a[nod].ap--;
}
a[nod].sf--;
nod=1;
int keep;
for(int i=0;i<len;i++)
{
keep=a[nod].fiu[ch[i]-'a'];
if(a[keep].ap==0)
{
delq.push_back(keep);
a[nod].fiu[ch[i]-'a']=0;
}
nod=keep;
}
}
void q1()
{
int len=strlen(ch);
int nod=1;
for(int i=0;i<len;i++)
{
nod=a[nod].fiu[ch[i]-'a'];
}
res=a[nod].sf;
}
void q2()
{
int len=strlen(ch);
int nod=1;
res=0;
for(int i=0;i<len;i++)
{
if(a[nod].fiu[ch[i]-'a']!=0)
{
res++;
nod=a[nod].fiu[ch[i]-'a'];
if(a[nod].ap==0)
{
res--;
break;
}
}
else
{
break;
}
}
}
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
while(!feof(stdin))
{
scanf("%d %s\n",&type,ch);
if(type==0)
{
add();
}
else if(type==1)
{
del();
}
else if(type==2)
{
q1();
printf("%d\n",res);
}
else
{
q2();
printf("%d\n",res);
}
}
}