Pagini recente » Cod sursa (job #1175695) | Cod sursa (job #1759896) | Cod sursa (job #1547964) | Cod sursa (job #1926898) | Cod sursa (job #1518080)
#include<stdio.h>
#include<vector>
#include<string.h>
using namespace std;
struct str
{
int fiu[26];
int apar;
int sfr;
}v[150001];
vector<int> del;
char ch[25];
int type,nod,pos=2;
FILE *fin,*fout;
void add()
{
int lg=strlen(ch);
nod=1;
for(int i=0;i<lg;i++)
{
if(v[nod].fiu[ch[i]-'a']==0)
{
if(del.empty())
{
v[nod].fiu[ch[i]-'a']=pos;
pos++;
}
else
{
v[nod].fiu[ch[i]-'a']=del.back();
del.pop_back();
}
}
v[v[nod].fiu[ch[i]-'a']].apar++;
//fprintf(fout,"1 %c %d %d\n\n",ch[i],v[nod].fiu[ch[i]-'a'],v[v[nod].fiu[ch[i]-'a']].apar);
nod=v[nod].fiu[ch[i]-'a'];
}
v[nod].sfr++;
}
void rid()
{
int lg=strlen(ch);
nod=1;
for(int i=0;i<lg;i++)
{
v[v[nod].fiu[ch[i]-'a']].apar--;
//fprintf(fout,"2 %d %d\n\n",nod,v[nod].apar);
if(v[v[nod].fiu[ch[i]-'a']].apar==0)
{
del.push_back(v[nod].fiu[ch[i]-'a']);
v[nod].fiu[ch[i]-'a']=0;
}
nod=v[nod].fiu[ch[i]-'a'];
}
v[nod].sfr--;
}
void tip1()
{
int lg=strlen(ch);
nod=1;
for(int i=0;i<lg;i++)
{
if(v[nod].fiu[ch[i]-'a']!=0)
{
nod=v[nod].fiu[ch[i]-'a'];
}
else
{
nod=0;
break;
}
}
fprintf(fout,"%d\n",v[nod].sfr);
}
void tip2()
{
int lg=strlen(ch);
nod=1;
int ln=0;
for(int i=0;i<lg;i++)
{
//fprintf(fout,"%c %d %d %d\n",ch[i],nod,v[nod].fiu[ch[i]-'a'],v[nod].apar);
if(v[nod].fiu[ch[i]-'a']!=0)
{
ln++;
nod=v[nod].fiu[ch[i]-'a'];
if(v[nod].apar==0)
{
ln--;
break;
}
}
else
{
break;
}
}
fprintf(fout,"%d\n",ln);
}
int main()
{
fin=fopen("trie.in","r");
fout=fopen("trie.out","w");
while(!feof(fin))
{
fscanf(fin,"%d %s",&type,ch);
if(type==0)
{
add();
}
else if(type==1)
{
rid();
}
else if(type==2)
{
tip1();
}
else
{
tip2();
}
}
}