Pagini recente » Cod sursa (job #2797977) | Cod sursa (job #577966) | Cod sursa (job #158635) | Cod sursa (job #754960) | Cod sursa (job #2276771)
#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=0;cuv[i];i++)
{
lit=cuv[i]-'a';
if(p->leg[lit]==NULL)
{
q=new Nod;
q->cnt=1;
q->nr=0;
for(int j=0;j<26;j++)
q->leg[j]=NULL;
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=0;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=0;cuv[i];i++)
{
lit=cuv[i]-'a';
if(p->leg[lit]==NULL)
{
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=0;cuv[i];i++)
{
lit=cuv[i]-'a';
if(p->leg[lit]!=NULL && p->leg[lit]->cnt>0)
{
lg++;
p=p->leg[lit];
}
else
{
fout<<lg<<"\n";
return ;
}
}
fout<<lg<<"\n";
}
int main()
{
L=new Nod;
L->nr=L->cnt=0;
for(int i=0;i<26;i++)
L->leg[i]=NULL;
while(fin>>op>>cuv)
{
if(op==0)Insert();
else if(op==1)Delete();
else if(op==2)Nrap();
else Prefix();
}
fin.close();
fout.close();
return 0;
}