Pagini recente » Cod sursa (job #2323433) | Cod sursa (job #2292631) | Cod sursa (job #2251775) | Cod sursa (job #694742) | Cod sursa (job #1801691)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct Nod
{
int cnt,info;
Nod *leg[26];
Nod(int v)
{
cnt=v;
info=0;
for(int i=0;i<26;i++)
leg[i]=NULL;
}
};
Nod *rad;
inline void Adauga(const char s[])
{
int i,j;
Nod *p;
Nod *q;
p=rad;
for(i=0;s[i];i++)
{
j=s[i]-'a';
if(p->leg[j]!=NULL)
p=p->leg[j];
else
{
q=new Nod(0);
p->leg[j]=q;
p=q;
}
p->info++;
}
p->cnt++;
}
inline void Sterge(const char s[])
{
int i,j;
Nod *p;
p=rad;
for(i=0;s[i];i++)
{
j=s[i]-'a';
p=p->leg[j];
p->info--;
}
p->cnt--;
}
inline int Print(const char s[])
{
int i,j;
Nod *p;
p=rad;
for(i=0;s[i];i++)
{
j=s[i]-'a';
if(p->leg[j]==NULL) return 0;
p=p->leg[j];
}
return p->cnt;
}
inline int Prefix(char s[])
{
int i,j;
Nod *p;
p=rad;
int contor=0;
for(i=0;s[i];i++)
{
j=s[i]-'a';
if(p->leg[j]==NULL)
return contor;
else
{
p=p->leg[j];
if(p->info!=0) contor++;
else return contor;
}
}
return contor;
}
char s[25];
void Citire()
{
int cerinta;
while(fin>>cerinta>>s)
{
if(cerinta==0) Adauga(s);
else if(cerinta==1) Sterge(s);
else if(cerinta==2) fout<<Print(s)<<"\n";
else fout<<Prefix(s)<<"\n";
}
fin.close();
fout.close();
}
int main()
{
rad=new Nod(0);
Citire();
return 0;
}