Cod sursa(job #1468158)

Utilizator robertstrecheStreche Robert robertstreche Data 5 august 2015 12:49:42
Problema Trie Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <map>

#define LMAX 21

using namespace std;

ifstream f("trie.in");
ofstream g("trie.out");

int n,op;
char S[LMAX];

struct trie{
   int ap;
   trie *son[26];
   trie()
   {
       ap=0;
       for (int i=0;i<26;i++)son[i]=0;
   }
};

trie *Root=new trie;

inline int cautare(trie *nod,char *s)
{
    int nivel=0,ma=0,numar;
    while (*s!=0)
    {
        if (nod->son[*s-'a']==0 && !op)
         nod->son[*s-'a']=new trie;

        if (nod->son[*s-'a'])
         nod=nod->son[*s-'a'];
        else break;
        if (op<=1)
        nod->ap+=(!op?1:-1);
        if (op==3 && nod->ap)ma=nivel+1;
        s++;
        nivel++;
    }
    if (op==3)return ma;

    if (op==2)
    {
        if (*s)return 0;
        numar=nod->ap;
        for (int i=0;i<26;i++)
         if (nod->son[i] && nod!=Root)numar-=nod->son[i]->ap;
        return numar;
    }
    return 0;
}
int main()
{
    while (f>>op)
    {
        f>>S;
        int val=cautare(Root,S);
        if (op==2 || op==3)g<<val<<'\n';
    }

    f.close();
    g.close();
}