Pagini recente » Cod sursa (job #1912126) | Cod sursa (job #113446) | Cod sursa (job #3268260) | Cod sursa (job #238155) | Cod sursa (job #2436439)
#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,lit[30];
nod *root,*elim[30];
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 top=0;
for(p=w,q=root;*p;p++)
{
elim[++top]=q;
int i=decode(*p);
lit[top]=i;
q=q->s[i];
q->t--;
}
q->c--;
for(;top;top--)
{
q=elim[top];
int i=lit[top];
e=q->s[i];
if(e->c)return;
q->s[i]=NULL;
delete e;
}
}
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';
}