Pagini recente » Cod sursa (job #2001546) | Cod sursa (job #495536) | Cod sursa (job #2013434) | Cod sursa (job #227250) | Cod sursa (job #2276768)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct Nod
{
int nr,cnt;
Nod *leg[26];
}*L;
int op;
char cuv[25];
void Insert()
{
int lit;
Nod *p,*q;
p=L;
for(int i=1;cuv[i];i++)
{
lit=cuv[i]-'a';
if(p->leg[lit]==0)
{
q=new Nod;
q->cnt=1;
q->nr=0;
for(int j=0;j<26;j++)
q->leg[j]=0;
p->leg[lit]=q;
p=q;
}
else
{
p=p->leg[lit];
p->cnt++;
}
}
p->cnt++;
p->nr++;
}
void Delete()
{
int lit;
Nod *p;
p=L;
for(int i=1;cuv[i];i++)
{
lit=cuv[i]-'a';
p=p->leg[lit];
p->cnt--;
}
p->cnt--;
p->nr--;
}
void Nrap()
{
int lit;
Nod *p;
p=L;
for(int i=1;cuv[i];i++)
{
lit=cuv[i]-'a';
if(p->leg[lit]==0)
{
fout<<"0\n";
return ;
}
p=p->leg[lit];
}
fout<<(p->nr)<<"\n";
}
void Prefix()
{
int lit,lg;
Nod *p;
lg=0;
p=L;
for(int i=1;cuv[i];i++)
{
lit=cuv[i]-'a';
if(p->leg[lit]!=0 && p->leg[lit]->cnt>0)
{
lg++;
p=p->leg[lit];
}
else
{
fout<<lg<<"\n";
return ;
}
}
}
int main()
{
L=new Nod;
L->nr=L->cnt=0;
for(int i=0;i<26;i++)
L->leg[i]=0;
while(fin>>op>>(cuv+1))
{
if(op==0)Insert();
else if(op==1)Delete();
else if(op==2)Nrap();
else Prefix();
}
return 0;
}