Pagini recente » Cod sursa (job #2679966) | Cod sursa (job #1838643) | Cod sursa (job #701425) | Cod sursa (job #1085178) | Cod sursa (job #2137397)
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct node{
int term,cuv;
node* next[26];
};
node *root;
void init(node *it)
{
for(char 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->cuv+=;
}
void del(char *sir)
{
node *it;
it=root;
while(*sir!=0)
{
it=it->next[*sir-'a'];
it->term--;
sir++;
}
}
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;
}
return it->cuv;
}
int prefix(char *sir)
{
node *it=root;
if(root->term==0)
return 0;
int n=strlen(sir),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(sir);
}
if(op==2)
{
g<<apar(sir)<<'\n';
}
if(op==3)
{
g<<prefix(sir)<<'\n';
}
}
return 0;
}