Cod sursa(job #1875361)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 10 februarie 2017 23:50:58
Problema Trie Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.92 kb
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
vector<int>ram;
int post=2;
struct trie
{
    int sfarsit;
    int nrap;
    int fiu[27];
}a[120005];
char ch[50];
void add()
{
    int lun=strlen(ch);
    int nod=1;
    for(int i=0;i<lun;i++)
    {
        if(a[nod].fiu[ch[i]-'a']==0)
        {
            if(ram.empty())
            {
                a[nod].fiu[ch[i]-'a']=post;
                post++;
            }
            else
            {
                a[nod].fiu[ch[i]-'a']=ram.back();
                ram.pop_back();
            }
        }
        nod=a[nod].fiu[ch[i]-'a'];
        a[nod].nrap++;
    }
    a[nod].sfarsit++;
}
void rem()
{
    int lun=strlen(ch);
    int nod=1;
    for(int i=0;i<lun;i++)
    {
        nod=a[nod].fiu[ch[i]-'a'];
        a[nod].nrap--;
    }
    a[nod].sfarsit--;
    nod=1;
    for(int i=0;i<lun;i++)
    {
        int temp=a[nod].fiu[ch[i]-'a'];
        if(a[temp].nrap==0)
        {
            ram.push_back(temp);
            a[nod].fiu[ch[i]-'a']=0;
        }
        nod=temp;
    }
}
void check()
{
    int lun=strlen(ch);
    int nod=1;
    for(int i=0;i<lun;i++) nod=a[nod].fiu[ch[i]-'a'];
    printf("%d\n",a[nod].sfarsit);
}
void pref()
{
    int lun=strlen(ch);
    int nod=1,ct=0;
    for(int i=0;i<lun;i++)
    {
        if(a[nod].fiu[ch[i]-'a']!=0)
        {
            ct++;
            nod=a[nod].fiu[ch[i]-'a'];
            if(a[nod].nrap==0)
            {
                ct--;
                break;
            }
        }
        else break;
    }
    printf("%d\n",ct);
}
int main()
{
    freopen ("trie.in","r",stdin);
    freopen ("trie.out","w",stdout);
    int op;
    while(1)
    {
        scanf("%d%s",&op,ch);
        if(feof(stdin)) break;
        if(op==0) add();
        else if(op==1) rem();
        else if(op==2) check();
        else pref();
    }
}