Pagini recente » Cod sursa (job #74166) | Cod sursa (job #937689) | Cod sursa (job #2649789) | Cod sursa (job #2388853) | Cod sursa (job #2261897)
#include <fstream>
#include <cstring>
#define CH (*s - 'a')
using namespace std;
ifstream fin("trie.in");
ofstream fout("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 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;}