Pagini recente » Cod sursa (job #2353951) | Cod sursa (job #875620) | Cod sursa (job #46337) | Cod sursa (job #138036) | Cod sursa (job #2172188)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct Trie
{
int val;
int fin_cuv;
Trie *v[30];
Trie()
{
val = fin_cuv = 0;
for(int i=0; i<=29; i++)
v[i] = 0;
}
};
Trie *R = new Trie();
Trie *W[30];
Trie *Q = new Trie();
Trie *Aux = new Trie();
int op;
char S[30];
/*
void afiseaza_Trie(Trie *a)
{
vector<char> stk;
for(int nr=1; nr<=a->fin_cuv && a->val; nr++)
{
for(auto it:stk)
cout<<it;
cout<<'\n';
}
for(int i=0; i<='z'-'a'; i++)
{
if(a->v[i])
{
stk.push_back(i+'a');
afiseaza_Trie(a->v[i]);
}
}
stk.pop_back();
}
*/
void adauga_cuvant(char s[])
{
int sz = strlen(s);
Q = R;
for(int i=0; i<sz; i++)
{
if(Q->v[s[i]-'a'] == 0)
{
Aux = new Trie();
Q->v[s[i]-'a'] = Aux;
}
Q->val ++;
Q = Q->v[s[i]-'a'];
}
Q->val++;
Q->fin_cuv++;
}
void sterge_cuvant(char s[])
{
int sz = strlen(s);
Q = R;
for(int i=0; i<sz; i++)
{
Q->v[s[i]-'a']->val = max(Q->v[s[i]-'a']->val-1 , 0);
Q = Q->v[s[i]-'a'];
}
}
void afiseaza_aparitii(char s[])
{
int sz=strlen(s);
Q=R;
for(int i=0; i<sz; i++)
{
if(!Q->v[s[i]-'a'])
{
fout<<0<<'\n';
return;
}
Q=Q->v[s[i]-'a'];
}
fout<<Q->fin_cuv<<'\n';
}
void cel_mai_lung_prefix(char s[])
{
int i,sz=strlen(s), sol=0;
for(i=0, Q=R; i<sz;i++){
if(Q->v[s[i]-'a'] && Q->v[s[i]-'a']->val)
{
sol++;
Q=Q->v[s[i]-'a'];
}
else break;
}
fout<<sol<<'\n';
}
int main()
{
while(fin >> op)
{
fin >> S;
if(op == 0)
adauga_cuvant(S);
if(op == 1)
sterge_cuvant(S);
if(op == 2)
afiseaza_aparitii(S);
if(op == 3)
cel_mai_lung_prefix(S);
}
return 0;
}