Pagini recente » Cod sursa (job #2864670) | Cod sursa (job #229998) | Cod sursa (job #1715157) | Cod sursa (job #669895) | Cod sursa (job #1638819)
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
FILE *fin,*fout;
struct str
{
int ap;
int en;
int fiu[27];
} a[120010];
int type;
char ch[21];
int p=2;
vector<int> dl;
void add()
{
int ln=strlen(ch);
int nod=1;
for(int i=0;i<ln;i++)
{
if(a[nod].fiu[ch[i]-'a']==0)
{
if(dl.empty())
{
a[nod].fiu[ch[i]-'a']=p;
p++;
}
else
{
a[nod].fiu[ch[i]-'a']=dl.back();
dl.pop_back();
}
}
a[a[nod].fiu[ch[i]-'a']].ap++;
nod=a[nod].fiu[ch[i]-'a'];
}
a[nod].en++;
}
void del()
{
int ln=strlen(ch);
int nod=1;
int nod1;
for(int i=0;i<ln;i++)
{
a[a[nod].fiu[ch[i]-'a']].ap--;
nod1=a[nod].fiu[ch[i]-'a'];
if(a[a[nod].fiu[ch[i]-'a']].ap==0)
{
dl.push_back(a[nod].fiu[ch[i]-'a']);
a[nod].fiu[ch[i]-'a']=0;
}
nod=nod1;
}
a[nod].en--;
}
void chk1()
{
int ln=strlen(ch);
int nod=1;
for(int i=0;i<ln;i++)
{
if(a[nod].fiu[ch[i]-'a']!=0)
{
nod=a[nod].fiu[ch[i]-'a'];
}
else
{
fprintf(fout,"0\n");
return;
}
}
fprintf(fout,"%d\n",a[nod].en);
}
void chk2()
{
int ln=strlen(ch);
int nod=1;
int ma=0;
for(int i=0;i<ln;i++)
{
if(a[nod].fiu[ch[i]-'a']!=0)
{
nod=a[nod].fiu[ch[i]-'a'];
ma++;
if(a[nod].ap==0)
{
ma--;
break;
}
}
else
{
break;
}
}
fprintf(fout,"%d\n",ma);
}
int main()
{
fin=fopen("trie.in","r");
fout=fopen("trie.out","w");
while(!feof(fin))
{
fscanf(fin,"%d",&type);
fscanf(fin,"%s",&ch);
if(type==0)
{
add();
}
else if(type==1)
{
del();
}
else if(type==2)
{
chk1();
}
else
{
chk2();
}
}
}