Pagini recente » Cod sursa (job #1869170) | Cod sursa (job #2624964) | Cod sursa (job #723929) | Cod sursa (job #1806997) | Cod sursa (job #2261888)
#include <fstream>
#include <cstring>
#define CH (*s - 'a')
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct Trie
{
short 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 elim( Trie *p, char *s)
{
p->pr--;
if(*s != '\0')
{
elim(p->fii[CH], s + 1);
}
}
int apar(Trie *p, char *s)
{
if(*s != '\0')
{
if(p->fii[CH] == NULL)
{
return 0;
}
else
{
return apar(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 k)
{
if(*s == '\0')
{
return k;
}
else
{
if(p->fii[CH] != NULL && 0 < p->fii[CH]->pr)
{
return prefix(p->fii[CH], s + 1, k + 1);
}
else
{
return k;
}
}
}
int main()
{
char s[32];
while(fin.getline(s, 31))
{
switch (s[0])
{
case '0':
adaug(T,s+2);
break;
case '1':
elim(T,s+2);
break;
case '2':
fout<<apar(T,s+2)<<'\n';
break;
case '3':
fout<<prefix(T,s+2,0)<<'\n';
break;
}
}
fin.close();
fout.close();
return 0;
}