Cod sursa(job #1697948)

Utilizator daneel95Holteiu Daniel-Ninel daneel95 Data 3 mai 2016 12:52:38
Problema Trie Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <bits/stdc++.h>
#define cuv(x) (x-'a')

using namespace std;

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

struct Trie
{
    int prefix=0,cuvant=0;
    Trie *next[26];
};

Trie *T;
char s[1024];
int n;
int pref;

void ins(int pos, Trie *T)
{
    if(T->next[cuv(s[pos])]==NULL)
        T->next[cuv(s[pos])]=new Trie;
    T=T->next[cuv(s[pos])];
    T->prefix++;
    if(pos==n-1)
        T->cuvant++;
    else
        ins(pos+1,T);
}

void del(int pos, Trie *T)
{
    T=T->next[cuv(s[pos])];
    T->prefix--;
    if(pos==n-1)
        T->cuvant--;
    else
        del(pos+1,T);
}

int words(int pos, Trie *T)
{
    if(T->next[cuv(s[pos])]==NULL)
        return 0;
    T=T->next[cuv(s[pos])];
    if(pos==n-1)
        return T->cuvant;
    else
        return words(pos+1,T);
}

void maxPrefix(int pos, Trie *T)
{
    if(T->next[cuv(s[pos])]==NULL)
        return;
    T=T->next[cuv(s[pos])];
    if(T->prefix>=1)
        pref++;
    else
        return;
    if(pos!=n-1)
        maxPrefix(pos+1,T);
}

int main()
{
    T=new Trie;
    int x;
    while(in>>x>>s)
    {
        n=strlen(s);
        if(x==0)
            ins(0,T);
        else if(x==1)
            del(0,T);
        else if(x==2)
            out<<words(0,T)<<"\n";
        else
        {
            pref=0;
            maxPrefix(0,T);
            out<<pref<<"\n";
        }
    }
    in.close();
    out.close();
    return 0;
}