Pagini recente » Cod sursa (job #1872531) | Cod sursa (job #2846129) | Cod sursa (job #886900) | Cod sursa (job #321362) | Cod sursa (job #1077097)
#include <fstream>
using namespace std;
ifstream fin ("trie.in");
ofstream fout ("trie.out");
struct trie
{
int nr,cuv;
trie *next[26];
trie()
{
nr=0;
cuv=0;
for(int i=0;i<26;i++)
next[i]=NULL;
}
}*root=new trie;
void op0(trie *, char [], int );
int op1(trie *, char [], int );
int op2(trie *, char [], int );
int op3(trie *, char [], int );
int main(void )
{
int x,n;
char s[22];
while(fin && fin>>x)
{
fin.get(s,21);
fin.get();
switch(x)
{
case 0:
op0(root,s+1,0);
break;
case 1:
x=op1(root,s+1,0);
break;
case 2:
fout<<op2(root,s+1,0)<<"\n";
break;
case 3:
fout<<op3(root,s+1,0)<<"\n";
break;
default:
break;
}
}
return 0;
}
int op3(trie *nod, char s[], int i)
{
if(s[i]=='\0' || nod->next[s[i]-97]==NULL)
return i;
return op3(nod->next[s[i]-97],s,i+1);
}
int op2(trie *nod, char s[], int i)
{
if(s[i]=='\0')
return nod->cuv;
if(nod->next[s[i]-97]!=NULL)
return op2(nod->next[s[i]-97],s,i+1);
return 0;
}
int op1(trie *nod, char s[], int i)
{
if(s[i]=='\0')
nod->cuv--;
else if(op1(nod->next[s[i]-97],s,i+1)==1)
{
nod->next[s[i]-97]=NULL;
nod->nr--;
}
if(nod->cuv==0 && nod->nr==0 && nod!=root)
{
delete nod;
return 1;
}
return 0;
}
void op0(trie *nod, char s[], int i)
{
if(s[i]=='\0')
{
nod->cuv++;
return;
}
if(nod->next[s[i]-97]==NULL)
{
nod->next[s[i]-97]=new trie;
nod->nr++;
}
op0(nod->next[s[i]-97],s,i+1);
}