Pagini recente » Cod sursa (job #1414977) | Cod sursa (job #1936545) | Cod sursa (job #718568) | Cod sursa (job #1051131) | Cod sursa (job #810146)
Cod sursa(job #810146)
#include<cstdio>
#include<cstring>
using namespace std;
int i,nr,lp,l;
char s[25];
struct nod
{
int nrfii,nrt;
nod *urm[26];
nod()
{
nrfii=nrt=0;
memset(urm,0,sizeof(urm));
}
};
nod *q,*t,*p;
int main()
{
freopen("trie.in","r",stdin);
freopen("trie.out","w",stdout);
t=new nod;
t->nrt=0;
t->nrfii=0;
while(!feof(stdin))
{
gets(s+1);
if(feof(stdin)) break;
if(s[1]>'3'||s[1]<'0') break;
if(s[1]=='0')
{
l=strlen(s+1);
p=t;
for(i=3;i<=l;i++)
{
if(p->urm[s[i]-'a']==0)
{
p->nrfii++;
q=new nod;
p->urm[s[i]-'a']=q;
q->nrfii=0;
q->nrt=0;
p=q;
}
else
{
p->nrfii++;
p=p->urm[s[i]-'a'];;
}
if(i==l)
p->nrt++;
}
}
else
if(s[1]=='1')
{
l=strlen(s+1);
p=t;
for(i=3;i<=l;i++)
{
if(p->nrfii==1)
{
delete p;
break;
}
else
{
p->nrfii--;
p=p->urm[s[i]-'a'];
}
if(i==l) p->nrt--;
}
}
else
if(s[1]=='2')
{
l=strlen(s+1);
p=t;
for(i=3;i<=l;i++)
{
if(p->urm[s[i]-'a']==0)
{
printf("0\n");
break;
}
p=p->urm[s[i]-'a'];
}
if(i>l) printf("%d\n",p->nrt);
}
else
if(s[1]=='3')
{
l=strlen(s+1);
p=t;
lp=0;
for(i=3;i<=l;i++)
{
if(p->urm[s[i]-'a']==0||p->nrfii==0) break;
p=p->urm[s[i]-'a'];
lp++;
}
printf("%d\n",lp);
}
}
return 0;
}