Cod sursa(job #1538326)

Utilizator diana-t95FMI Tudoreanu Diana Elena diana-t95 Data 28 noiembrie 2015 20:21:36
Problema Trie Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.71 kb
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct trie
{
    trie *next[27];
    int x;
    int ok;
    trie() {
        x = 0;
        for (int i = 0; i < 26; i++)
            next[i] = NULL;
        ok = 0;

    }
};
trie *r;
void insert_str(string s)
{
    trie *aux = r;
    for (int i = 0; i < s.size(); i++)
    {
    	if (aux->next[s[i] - 'a'] == NULL)
    	{
    		aux->next[s[i] - 'a'] = new trie();
    	}

        aux = aux->next[s[i]-'a'];
        aux->ok++;
    }

    aux->x = aux->x + 1;
}
void delete_str(string s)
{
        trie *aux = r;
    for (int i = 0; i < s.size(); i++)
    {
        aux = aux->next[s[i]-'a'];
        aux->ok--;
    }

    aux->x = aux->x - 1;

}

int count_str(string s)
{
        trie *aux = r;
    for (int i = 0; i < s.size(); i++)
    {
    	if (aux->next[s[i] - 'a'] == NULL)
    	{
    		return 0;
    	}
        aux = aux->next[s[i]-'a'];

    }

    return aux->x;
}

int lcs_str(string s)
{
        trie *aux = r;
    for (int i = 0; i < s.size(); i++)
    {
    	if (aux->next[s[i] - 'a'] == NULL || aux->next[s[i] - 'a']->ok <= 0)
    	{
    		return i;
    	}

        aux = aux->next[s[i]-'a'];
    }

    return s.size();

}
int main()
{
    ifstream f("trie.in");
    ofstream g("trie.out");
    string s;
    r = new trie();
    int op;
    while (f>>op>>s)
    {
        if (op==0)
        {
            insert_str(s);
        }
        if (op==1)
        {
            delete_str(s);
        }
        if (op==2)
        {
            g<<count_str(s)<<'\n';
        }
        if (op==3)
        {
            g<<lcs_str(s)<<'\n';
        }
    }
}