Cod sursa(job #1881234)

Utilizator bt.panteaPantea Beniamin bt.pantea Data 16 februarie 2017 11:57:52
Problema Trie Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 2.21 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;
ifstream f ("trie.in");
ofstream g ("trie.out");
char s[50];
class arb
{
public:
    arb * fii[30];
    char c;
    int value, totalValue;
    arb()
    {
        for (int i = 0; i <= 26; i++)
            fii[i] = NULL;
        value = 0;
        totalValue = 0;
    }
} * papa, * p;

void type0(char s[])
{
    char c = s[0];
    int i = 0;
    p = papa;
    int n = strlen(s);
    while (i < n)
    {
        //cout<<i<<' ';
        c = s[i];
        if (p->fii[c - 'a'] == NULL)
        {
            p->fii[c- 'a'] = new arb();
            p = p->fii[c - 'a'];
            //p->totalValue++;
        }
        else
        {
            p = p->fii[c - 'a'];
        }
        p->totalValue++;
        i++;
    }
    p->value++;
}

void type1(char s[])
{
    char c;
    int i = 0;
    p = papa;
    int n = strlen(s);
    while (i < n)
    {
        c = s[i];
        p = p->fii[c - 'a'];
        p->totalValue--;
        i++;
    }
    p->value--;
}

int type2(char s[])
{
    char c;
    int i = 0, n = strlen(s);
    p = papa;
    while (i < n)
    {
        //cout<<i<<' ';
        c = s[i];
        if (p->fii[c - 'a'] == NULL)
        {
            //cout<<c<<' ';
            return 0;
        }
        p = p->fii[c - 'a'];
        i++;
    }
    return p->value;
}
int type3(char s[])
{
    char c;
    p = papa;
    int i = 0, n = strlen(s), Max = 0;
    while (i < n)
    {
        c = s[i];
        if (p->fii[c - 'a'] == NULL)
            return Max;
        p = p->fii[c - 'a'];
        if (p->totalValue > 0)
            Max = i + 1;
        i++;
    }
    return Max;
}

int main()
{
    papa = new arb();
    while (f.getline(s, 25))
    {
        //cout<<s<<' ';
        int p = s[0] - '0';
        // s + 2;
        if (p == 0)
        {
            type0(s + 2);
        }
        else if (p == 1)
        {
            type1(s + 2);
        }
        else if (p == 2)
        {
            g<<type2(s + 2)<<'\n';
        }
        else if (p == 3)
        {
            g<<type3(s + 2)<<'\n';
        }
    }
    return 0;
}