Pagini recente » Cod sursa (job #1311878) | Cod sursa (job #1445894) | Cod sursa (job #106507) | Cod sursa (job #905259) | Cod sursa (job #1852027)
#include <bits/stdc++.h>
//Original source : Oanea Smit Andrei (Smit@infoarena)
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;
}