Pagini recente » Cod sursa (job #1984549) | Cod sursa (job #743089)
Cod sursa(job #743089)
#include<iostream.h>
#include<fstream.h>
#include<string.h>
#include <cstring>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");
struct trie
{ int nr,tot;
trie *nexts[30];
trie()
{ nr = tot = 0;
memset(nexts,0,sizeof(nexts));}
};
trie *x=new trie;
char cuv[30];
void put(trie *node,char *s)
{if (*s == '\n')
{
node->nr++;
return;}
int poz=*s-'a';
if(node->nexts[poz]==0)
{node->nexts[poz]=new trie;
node->tot++;}
put(node->nexts[poz],s+1);
}
void del(trie *x, char *cuv)
{for(int i=0, t=cuv[i]-97, n=strlen(cuv); i<n; i++, t=cuv[i]-97, x->tot--)
if(x->nexts[t]!=NULL)
x=x->nexts[t];
x->nr--;
}
int number(trie *node,char *s)
{
if(*s=='\n')
return node->nr;
if(node->nexts[*s-'a'])
return
number(node->nexts[*s-'a'],s+1);
return 0;}
int prefix(trie *node,char *s,int nr)
{
if( node->nexts[*s-'a']==0)
return nr;
return prefix(node->nexts[*s-'a'],s+1,nr+1);
}
void filework()
{int ch;
while(f>>ch>>cuv)
{if(ch==0)
put(x,cuv+2);
if(ch==1)
del(x,cuv+2);
if(ch==2)
g<<number(x,cuv);
if(ch==3)
g<<prefix(x,cuv,0);
}
f.close();
g.close();
}
int main()
{
filework();
return 0;}