Cod sursa(job #2006422)

Utilizator stefzahZaharia Stefan Tudor stefzah Data 29 iulie 2017 20:23:24
Problema Trie Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
int k,x,n;
char s[22];
struct trie{int nr,val,next[26];}init;
vector <trie>v;
void Update(int P,int poz,int vl)
      {v[P].nr+=vl;
       if(!s[poz])
         v[P].val+=vl;
       else {x=s[poz]-'a';
             if(!v[P].next[x])
               {n++;
                v.push_back(init);
                v[P].next[x]=n;
               }
             Update(v[P].next[x],poz+1,vl);
            }
      }
int Query(int P,int poz)
         {x=s[poz]-'a';
          if(!s[poz])
            return v[P].val;
          else if(v[P].next[x])
                 return Query(v[P].next[x],poz+1);
               else return 0;
         }
int Multi()
   {int i,P=0;
    for(i=0;s[i]&&v[P].nr;i++)
       {P=v[P].next[s[i]-'a'];
        if(!P)
          return i;
       }
    if(!v[P].nr)i--;
    return i;
   }
int main()
{int i;
 init.nr=0;
 init.val=0;
 for(i=0;i<26;i++)
   init.next[i]=0;
 v.push_back(init);
 while(fin>>k)
      {fin>>s;
       if(k==0)Update(0,0,1);
       else if(k==1)Update(0,0,-1);
       else if(k==2)fout<<Query(0,0)<<"\n";
       else if(k==3)fout<<Multi()<<"\n";
      }
}