Pagini recente » Cod sursa (job #3258146) | Cod sursa (job #258597) | Cod sursa (job #1402544) | Cod sursa (job #3193529) | Cod sursa (job #2137362)
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct node{
int term;
node* next[26];
};
node *root;
void init(node *it)
{
for(int i=0;i<26;i++)
it->next[i]=0;
it->term=0;
}
void add(char *sir)
{
int n=strlen(sir);
node *it;
it=root;
for(int i=0;i<n;i++)
{
if(!it->next[sir[i]-'a'])
{
it->next[sir[i]-'a']=new node;
init(it->next[sir[i]-'a']);
}
it->term++;
it=it->next[sir[i]-'a'];
}
it->term++;
}
void del(node *it,char *sir)
{
if(*sir!=0)
{
del(it->next[sir[0]-'a'],sir+1);
}
it->term--;
}
int apar(char *sir)
{
int n=strlen(sir);
node *it=root;
for(int i=0;i<n;i++)
{
if(it->next[sir[i]-'a'])
it=it->next[sir[i]-'a'];
else return 0;
}
int rez=it->term,i;
for(i=0;i<26;i++)
if(it->next[i])
rez-=it->next[i]->term;
return rez;
}
int prefix(char *sir)
{
node *it=root;
int nr,n=strlen(sir),maxim=0,i;
for(i=0;i<n;i++)
{
if(it->term==0)
return i-1;
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;
init(root);
while(f>>op)
{
f>>sir;
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;
}