Pagini recente » Cod sursa (job #1377757) | Cod sursa (job #1360064) | Diferente pentru autumn-warmup-2007/solutii/runda-2 intre reviziile 47 si 46 | Monitorul de evaluare | Cod sursa (job #2568047)
#include <bits/stdc++.h>
#define car (*c-'a')
using namespace std;
ifstream fin ("trie.in");
ofstream fout ("trie.out");
struct trie
{
int nr, fii;
trie *f[27];
trie()
{
nr=fii=0;
memset(f, 0, sizeof(f));
}
};
trie *t=new trie;
char c[25];
void add(trie *nod, char *c)
{
if(*c==0)
{
nod->nr++;
return;
}
if(nod->f[car]==0)
{
nod->fii++;
nod->f[car]=new trie;
}
add(nod->f[car], c+1);
}
bool del(trie *nod, char *c)
{
if(*c==0)
nod->nr--;
else if(del(nod->f[car], c+1))
{
nod->f[car]=0;
nod->fii--;
}
if(nod->nr==0 && nod->fii==0 && nod!=t)
{
delete nod;
return 1;
}
return 0;
}
int ap(trie *nod, char *c)
{
if(*c==0)
return nod->nr;
if(nod->f[car]==0)
return 0;
return ap(nod->f[car], c+1);
}
int pref(trie *nod, char *c)
{
if(*c==0 || nod->f[car]==0)
return 0;
return 1+pref(nod->f[car], c+1);
}
int main()
{
while(fin.getline(c, 25))
{
if(c[0]=='0')
add(t, c+2);
else if(c[0]=='1')
del(t, c+2);
else if(c[0]=='2')
fout << ap(t, c+2) << '\n';
else fout << pref(t, c+2) << '\n';
}
return 0;
}