Pagini recente » Cod sursa (job #2469707) | Cod sursa (job #2258670) | Cod sursa (job #2310356) | Cod sursa (job #2734756) | Cod sursa (job #2436442)
#include <bits/stdc++.h>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct nod
{
int c,t;
nod *s[26];
nod()
{
c=t=0;
for(int i=0;i<26;i++)
s[i]=NULL;
}
};
int cod;
nod *root;
char w[30];
void insereaza(),sterge(nod*,char*),numara(),prefix();
inline int decode(char ch){return (int)(ch-'a');}
int main()
{
root = new nod;
while(f>>cod)
{
f>>w;
if(cod==0)insereaza();
else if(cod==1)sterge(root,w);
else if(cod==2)numara();
else prefix();
}
return 0;
}
void insereaza()
{
char *p;
nod *q;
for(p=w,q=root;*p;p++)
{
int i=decode(*p);
if(!q->s[i])q->s[i]=new nod;
q=q->s[i];
q->t++;
}
q->c++;
}
void sterge(nod *q,char *p)
{
q->t--;
if(*p==0){q->c--;return;}
int i=decode(*p);
sterge(q->s[i],p+1);
nod *r=q->s[i];
if(!r->t)
{
q->s[i]=NULL;
delete r;
}
}
void numara()
{
char *p;
nod *q;
for(p=w,q=root;*p;p++)
{
int i=decode(*p);
if(!q->s[i]){g<<"0\n";return;};
q=q->s[i];
}
g<<(q->c)<<'\n';
}
void prefix()
{
char *p;
nod *q;
int lg=0;
for(p=w,q=root;*p;p++)
{
int i=decode(*p);
if(!q->s[i]){g<<lg<<'\n';return;}
q=q->s[i];
lg++;
}
g<<lg<<'\n';
}