Pagini recente » Cod sursa (job #2389566) | Cod sursa (job #382867) | Cod sursa (job #1898216) | Cod sursa (job #2232849) | Cod sursa (job #2095432)
#include <fstream>
#define chr *s-'a'
using namespace std;
ifstream F("trie.in");
ofstream G("trie.out");
struct trie
{
int k, fiu;
trie *v[30];
trie()
{
k = fiu = 0;
for(int i = 0; i < 26; ++ i) v[i] = 0;
}
};
int x; char s[35]; trie *T = new trie;
void Ins(trie *nod, char *s)
{
if(chr < 0) {nod->k++; return;}
if(!(nod->v[chr]))
{
nod->v[chr] = new trie;
nod->fiu++;
}
Ins(nod->v[chr], s+1);
}
int Del(trie *nod, char *s)
{
if(chr < 0) nod->k--;
else if(Del(nod->v[chr], s+1))
{
nod->v[chr] = 0;
nod->fiu--;
}
if( !(nod->k) && nod != T && !(nod->fiu) ) {delete nod; return 1;}
return 0;
}
int Ap(trie *nod, char *s)
{
if(chr < 0) return nod->k;
if(nod->v[chr]) return Ap(nod->v[chr], s+1);
return 0;
}
int Pref(trie *nod, char *s, int ans)
{
if(!(nod->v[chr]) || chr < 0) return ans;
return Pref(nod->v[chr], s+1, ans+1);
}
int main()
{
while(F >> x)
{
F.get();
F.get(s, 22);
if(!x) Ins(T, s);
else if(x == 1) Del(T, s);
else if(x == 2) G << Ap(T, s) << '\n';
else G << Pref(T, s, 0) << '\n';
}
return 0;
}