Pagini recente » Cod sursa (job #413974) | Cod sursa (job #2129105) | Cod sursa (job #1235557) | Cod sursa (job #623877) | Cod sursa (job #2436440)
#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(),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();
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()
{
char *p;
nod *q,*e;
int i;
for(p=w,q=root;*p;p++)
{
i=decode(*p);
if(q->s[i]->t==1)
{
e=q->s[i];
break;
}
q=q->s[i];
q->t--;
}
if(*p==0){q->c--;return;}
q->s[i]=0;
do
{
p++;
if(*p){i=decode(*p);q=e;e=e->s[i];delete q;}
else delete e;
}
while(*p);
}
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';
}