Pagini recente » Cod sursa (job #823192) | Cod sursa (job #1992001) | Cod sursa (job #1848935) | Cod sursa (job #1231776) | Cod sursa (job #1836867)
#include <bits/stdc++.h>
using namespace std;
struct trie
{
int frecv;
int nr; //cate se termina in nod
trie *s[26];
trie()
{
nr = frecv = 0;
for (int i = 0 ; i < 26; i++) s[i] = NULL;
}
};
trie *root = new trie();
char sir[23];
void Adaugare(char sir[])
{
int i;
int L = strlen(sir);
trie *p = root;
for(i = 0; i < L; ++i)
{
if (p->s[sir[i] - 'a'] == NULL) p->s[sir[i] - 'a'] = new trie();
p = p->s[sir[i] - 'a'];
p->frecv++;
}
p->nr++;
}
void Stergere(char sir[])
{
int i;
int L = strlen(sir);
trie *p = root;
for(i = 0; i < L; ++i)
{
p = p->s[sir[i] - 'a'];
p->frecv--;
}
p->nr--;
}
int NrAp(char sir[])
{
int i,L;
L=strlen(sir);
trie *p = root;
for(i = 0;i < L; ++i)
if(p->s[sir[i] - 'a'] != NULL)
p = p->s[sir[i] - 'a'];
else
return 0;
return p->nr;
}
int Prefix(char sir[])
{
int i, ans = 0;
int L = strlen(sir);
trie *p = root;
i=0;
while(i < L && p->s[sir[i] - 'a'] != NULL)
{
p = p->s[sir[i] - 'a'];
if (p->frecv > 0) ans++;
i++;
}
return ans;
}
int main()
{
int op;
ifstream fin("trie.in");
ofstream fout("trie.out");
while(fin>>op)
{
fin >> sir;
if(op==0)
Adaugare(sir);
if(op==1)
Stergere(sir);
if(op==2)
fout<<NrAp(sir)<<"\n";
if(op==3)
fout<<Prefix(sir)<<"\n";
}
return 0;}