Pagini recente » Cod sursa (job #2986225) | Cod sursa (job #1334481) | Cod sursa (job #1511449) | Cod sursa (job #3284835) | Cod sursa (job #2436434)
#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;
for(p=w,q=root;*p;p++)
{
int i=decode(*p);
q=q->s[i];
q->t--;
}
q->c--;
}
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';
}