Cod sursa(job #2534325)

Utilizator CalinachoGherlan Calin Paul Calinacho Data 30 ianuarie 2020 13:52:53
Problema Trie Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.64 kb
#include<fstream>
#include<algorithm>
#include<vector>
using namespace std;
///--------------------------------------------
int nr;
char s[27];
struct Trie
{
    int nr,rasp;
    Trie *fii[27];
};
Trie *t=new Trie();
///--------------------------------------------
void adauga(Trie *poz,char *s)
{
    poz->nr++;
    if(*s=='\0')
    {
        poz->rasp++;
        return;
    }
    int x=*s-'a';
    if(poz->fii[x]==NULL)
    {
        poz->fii[x]=new Trie();
    }
    adauga(poz->fii[x],s+1);
}
///--------------------------------------------
void sterge(Trie *poz,char *s)
{
    poz->nr--;
    if(*s=='\0')
    {
        poz->rasp--;
        return;
    }
    int x=*s-'a';
    sterge(poz->fii[x],s+1);
}
///--------------------------------------------
int cauta1(Trie *poz,char *s)
{
   if(*s=='\0')
   return poz->rasp;
   if(poz->fii[*s-'a']==NULL)
    return 0;
   else return cauta1(poz->fii[*s-'a'],s+1);
}
///--------------------------------------------
int cauta2(Trie *poz,char *s)
{   if(*s=='\0')
   return nr;
   if(poz->fii[*s-'a']==NULL or poz->fii[*s-'a']->nr==0)
   return nr;
   nr++;
    return cauta2(poz->fii[*s-'a'],s+1);
}   
///--------------------------------------------
int main()
{
    ifstream in("trie.in");
    ofstream out("trie.out");
    int q;
    while(in>>q>>s){
        nr = 0;
        switch(q){
            case 0:adauga(t,s); break;
            case 1:sterge(t,s); break;
            case 2:out<<cauta1(t,s)<<"\n";break;
            case 3:out<<cauta2(t,s)<<"\n"; break;
        }
        for(int i=0;i<29;i++)
        s[i]=='\0';
        
    }
    
}