Pagini recente » Cod sursa (job #162915) | Cod sursa (job #811435) | Cod sursa (job #1638090) | Cod sursa (job #344019) | Cod sursa (job #2138563)
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct node{
int term;
node* next[26];
node()
{
memset(next,0,sizeof(next));
term=0;
}
};
node *root,*it;
int n;
void add(char *sir)
{
n=strlen(sir);
for(int i=0;i<n;i++)
{
if(!it->next[sir[i]-'a'])
{
it->next[sir[i]-'a']=new node;
}
it=it->next[sir[i]-'a'];
}
it->term++;
}
void del(node *it,char *sir)
{
node* aux;
if(*sir!=0)
{
aux=it->next[sir[0]-'a'];
del(aux,sir+1);
if(aux->term==0)
{
for(int i=0;i<26;i++)
if(aux->next[i])
return ;
delete(aux);
it->next[sir[0]-'a']=0;
}
}
else it->term--;
}
int apar(char *sir)
{
n=strlen(sir);
for(int i=0;i<n;i++)
{
if(it->next[sir[i]-'a'])
it=it->next[sir[i]-'a'];
else return 0;
}
return it->term;
}
int prefix(char *sir)
{
n=strlen(sir);
int i;
for(i=0;i<n;i++)
{
if(it->next[sir[i]-'a'])
it=it->next[sir[i]-'a'];
else
return i;
}
return n;
}
int main()
{
int op;
char sir[25];
root=new node;
while(f>>op)
{
f>>sir;
it=root;
if(op==0)
add(sir);
if(op==1)
del(root,sir);
if(op==2)
g<<apar(sir)<<'\n';
if(op==3)
g<<prefix(sir)<<'\n';
}
return 0;
}