Pagini recente » Cod sursa (job #1032366) | Cod sursa (job #570739) | Cod sursa (job #872098) | Cod sursa (job #2861260) | Cod sursa (job #1772213)
#include <iostream>
#include<fstream>
#include<cstring>
using namespace std;
int x,l,i,n,q,k;
char w[20];
struct trie
{
int s,x; //x=numar de aparitii al cuvantului,care se va afla doar la ultima litera;
//s=numar de fii ai nodului
trie *v[26];
trie *t;
trie()
{
for(q=0;q<26;++q)
v[q]=NULL;
t=NULL;
s=0;x=0;
}
}*vf,*p,*e;
void ad(int n)
{
p=vf;
for(i=0;i<n && p->v[ w[i] -'a' ]!=NULL; ++i)
{
p=p->v[ w[i] -'a' ];
}
for(;i<n;++i)
{
++p->s;
p->v[ w[i] -'a' ]=new trie;
p->v[ w[i] -'a' ]->t=p;
p=p->v[ w[i] -'a' ];
}
++p->x;
}
void del(int n)
{
p=vf;
for(i=0;i<n; ++i)
{
p=p->v[ w[i] -'a' ];
}
--p->x;--i;
while(p->s<1 && p->t!=NULL && p->x<1)
{
e=p;
p=p->t;
--p->s;
p->v[ w[i] -'a' ]=NULL;
--i;
delete e;
}
}
int ap(int n)
{
p=vf;
for(i=0;i<n && p->v[ w[i] -'a' ]!=NULL;++i)
{
p=p->v[ w[i] -'a' ];
}
if(i<n)
{
return 0;
}
else
{
k=p->x;
return k;
}
}
int pm(int n)
{
p=vf;
for(i=0;i<n && p->v[ w[i] -'a' ];++i)
{
p=p->v[ w[i] -'a' ];
}
return i;
}
int main()
{
ifstream f("trie.in");
ofstream g("trie.out");
vf=new trie;
f>>x>>w;n=strlen(w);
while(!f.eof())
{
switch(x)
{
case 0:{ad(n);break;}
case 1:{del(n);break;}
case 2:{k=ap(n);g<<k<<'\n';break;}
case 3:{k=pm(n);g<<k<<'\n';break;}
}
f>>x>>w;n=strlen(w);
}
f.close();
g.close();
return 0;
}