Cod sursa(job #1890475)

Utilizator radu.leonardoThe Doctor radu.leonardo Data 23 februarie 2017 12:05:51
Problema Trie Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.45 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("trie.in");
ofstream g("trie.out");

int x,i,k;
char s[25];
struct Trie
{
    int info,co;
    Trie *a[30];

} *p,*q,*inc;

void add()
{
     for(i=0; s[i]; i++)
            {
                if(!p->a[s[i]-'a'])
                {
                    q=new Trie();
                    p->a[s[i]-'a']=q;
                    p=q;
                }
                else
                    p=p->a[s[i]-'a'];
                p->co++;
            }
            p->info++;
}

void del()
{
    for(i=0; s[i]; i++)
            {
                p=p->a[s[i]-'a'];
                p->co--;
            }
            p->info--;
}

void write()
{
    for(i=0; s[i]; i++)
                if(p->a[s[i]-'a'])
                    p=p->a[s[i]-'a'];
                else
                    break;
            if(!s[i])
                g<<(p->info)<<'\n';
            else
                g<<0<<'\n';
}

void prefix()
{
    k=0;
            for(i=0; s[i]; i++)
                if(p->a[s[i]-'a']&&p->co)
                    p=p->a[s[i]-'a'];
                else
                    break;
            if(!p->co)
                i--;
            g<<i<<'\n';
}
int main ()
{

    inc=new Trie();
    inc->co=1;
    while(f>>x>>s)
    {
        p=inc;
        if(x==0) add();
        else if(x==1)  del();
        else if(x==2)  write();
        else prefix();
    }
}