Pagini recente » Cod sursa (job #2357305) | Cod sursa (job #850541) | Cod sursa (job #2534244) | Rating Onofrei G (Onofrei_George) | Cod sursa (job #2416366)
#include <iostream>
#include <fstream>
#define CH (*s - 'a')
using namespace std;
ifstream in("trie.in");
ofstream out("trie.out");
struct Trie
{
int pr;
Trie *fii[26];
};
Trie *t = new Trie;
void adaug(Trie *p, char *s)
{
p->pr++;
if(*s != '\0')
{
if(p->fii[CH] == NULL)
p->fii[CH] = new Trie();
adaug(p->fii[CH], s + 1);
}
}
void del(Trie *p, char *s)
{
p->pr--;
if(*s != '\0')
del(p->fii[CH], s + 1);
}
int appars(Trie *p, char *s)
{
if(*s != '\0')
{
if(p->fii[CH] == NULL)
return 0;
else
return appars(p->fii[CH], s + 1);
}
else
{
int res = p->pr;
for(int i = 0; i < 26; i++)
if(p->fii[i] != NULL)
res -= p->fii[i]->pr;
return res;
}
}
int prefix(Trie *p, char *s, int cnt)
{
if(*s == '\0')
{
return cnt;
}
else
{
if(p->fii[CH] != NULL && p->fii[CH]->pr > 0)
return prefix(p->fii[CH], s + 1, cnt + 1);
else
return cnt;
}
}
int main()
{
char s[32];
while(in.getline(s, 31))
{
if(s[0] == '0')
adaug(t, s + 2);
else if(s[0] == '1')
del(t, s + 2);
else if(s[0] == '2')
out << appars(t, s + 2) << '\n';
else if(s[0] == '3')
out << prefix(t, s + 2, 0) << '\n';
}
in.close();
out.close();
return 0;
}