Cod sursa(job #743089)

Utilizator caramete_tCaramete Tiberiu caramete_t Data 3 mai 2012 08:46:30
Problema Trie Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#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;}