Cod sursa(job #1898959)

Utilizator ancabdBadiu Anca ancabd Data 2 martie 2017 13:56:45
Problema Trie Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <algorithm>
#include <fstream>

using namespace std;

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

int x , k;
char s[25];

struct Trie
{
    int info,co;
    Trie *a[30];

} *p,*q,*inc;

void add()
{
    for(int 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(int i = 0; s[i]; i++)
    {
        p = p -> a[s[i] - 'a'];
        p -> co--;
    }
    p -> info--;
}

void write()
{
    int i;
    for(i = 0; s[i]; i++)
        if(p -> a[s[i] - 'a'])p = p -> a[s[i] - 'a'];
        else break;

    if(!s[i])fout << (p -> info) << '\n';
    else fout << 0 << '\n';
}

void prefix()
{
    int i;
    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--;
    fout << i << '\n';
}
int main ()
{
    inc = new Trie();
    inc -> co = 1;
    while(fin >> x >> s)
    {
        p = inc;
        if(x == 0) add();
        else if(x == 1)  del();
        else if(x == 2)  write();
        else prefix();
    }
}