Cod sursa(job #2006155)

Utilizator stefzahZaharia Stefan Tudor stefzah Data 28 iulie 2017 20:25:36
Problema Trie Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#include <vector>
using namespace std;

int n=0;
struct trie{int val,nr,next[26];} init;
char s[22];
vector<trie> v;

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

void update(int P,int poz,int val)
{
    v[P].nr+=val;
    if (!s[poz])
    {
        v[P].val+=val;
        return;
    }
    int x=s[poz]-'a';
    if (!v[P].next[x])
    {
        v.push_back(init);
        v[P].next[x]=(++n);
    }
    update(v[P].next[x],poz+1,val);
}

int query(int P,int poz)
{
    if (!P && poz)
        return 0;
    if (!s[poz])
        return v[P].val;
    return query(v[P].next[s[poz]-'a'],poz+1);
}

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 k,qxn=0;
    init.val=init.nr=0;
    for (int i=0;i<26;i++)
        init.next[i]=0;
    v.push_back(init);
    while (in>>k>>s)
    {
        if (!k)
            update(0,0,1);
        if (k==1)
            update(0,0,-1);
        if (k>1)
            qxn++;
        if (k==2)
            out<<query(0,0)<<"\n";
        if (k==3)
            out<<multi()<<"\n";
    }
    return 0;
}