Pagini recente » Cod sursa (job #2022234) | Cod sursa (job #2022240) | Cod sursa (job #1034456) | Cod sursa (job #692258) | Cod sursa (job #2833766)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
struct trie{
int n,c;
trie *p[27];
trie(){
n=c=0;
memset(p,0,sizeof(p));
}
};
trie *t=new trie;
char s[21];
int op;
void op0(trie *nod,char *s)
{
if(!isalpha(*s))
{
nod->n++;
return;
}
int nxt=*s-'a';
if(!nod->p[nxt])
nod->c++, nod->p[nxt]=new trie;
op0(nod->p[nxt],s+1);
}
bool op1(trie *nod,char *s)
{
if(!isalpha(*s))
nod->n--;
else if(op1(nod->p[*s-'a'],s+1))
{
nod->c--;
nod->p[*s-'a']=0;
}
if(nod->n==0 && nod->c==0 && nod!=t)
{
delete nod;
return true;
}
return false;
}
int op2(trie *nod,char *s)
{
if(!isalpha(*s))
return nod->n;
if(nod->p[*s-'a'])
return op2(nod->p[*s-'a'],s+1);
return 0;
}
int op3(trie *nod,char *s,int lg)
{
if(!isalpha(*s) || nod->p[*s-'a']==0)
return lg;
return op3(nod->p[*s-'a'],s+1,lg+1);
}
int main()
{
while(fin>>op>>s)
{
switch(op)
{
case 0: op0(t,s); break;
case 1: op1(t,s); break;
case 2: fout<<op2(t,s)<<'\n'; break;
case 3: fout<<op3(t,s,0)<<'\n'; break;
}
}
return 0;
}