Pagini recente » Cod sursa (job #266750) | Cod sursa (job #3291718) | Cod sursa (job #275544) | Cod sursa (job #126836) | Cod sursa (job #3242045)
#include <iostream>
#include <fstream>
#define DIM 1000001
#include <cstring>
using namespace std;
ifstream fin ("trie.in");
ofstream fout("trie.out");
struct nod
{
int prefix;
int cuvant;
int fr[27];
}trie[DIM];
char s[21];
int op;
int cnt,sol;
void inserare(int nod, char s[21])
{
trie[nod].prefix++;
if(s[0]==0)
{
trie[nod].cuvant++;
return;
}
if(trie[nod].fr[s[0]-'a'])
{
inserare(trie[nod].fr[s[0]-'a'], s+1);
}
else
{
cnt++;
trie[nod].fr[s[0]-'a']=cnt;
inserare(cnt,s+1);
}
}
void stergere(int nod, char s[21])
{
trie[nod].prefix--;
if(s[0]==0)
{
trie[nod].cuvant--;
return;
}
else
{
stergere(trie[nod].fr[s[0]-'a'], s+1);
}
}
void prefix(int nod, int lg, char s[21])
{
if(trie[nod].prefix>0){
sol=lg;
if(s[0]==0)
return;
if(trie[nod].fr[s[0]-'a'])
prefix(trie[nod].fr[s[0]-'a'], lg+1, s+1);
else
return;
}
}
int nrcuv(int nod, char s[21])
{
if(s[0]==0)
return trie[nod].cuvant;
else
{
if(trie[nod].fr[s[0]-'a'])
return nrcuv(trie[nod].fr[s[0]-'a'], s+1);
else
return 0;
}
}
int main()
{
while(fin>>op>>s)
{
if(op==0)
{
inserare(0,s);
}
else if(op==1)
{
stergere(0,s);
}
else if(op==3)
{
prefix(0,0,s);
fout<<sol<<'\n';
}
else
{
fout<<nrcuv(0,s)<<'\n';
}
///fout<<"Sir->"<<s<<'\n';
}
return 0;
}