Cod sursa(job #2197311)

Utilizator HannaLieb Hanna Hanna Data 21 aprilie 2018 17:56:36
Problema Trie Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 kb
#include <fstream>
#include <map>
#include <vector>

using namespace std;

ifstream cin("trie.in");
ofstream cout("trie.out");

struct adat
{
    map<char,int>m;
    int dbszo,eddig;
};

vector<adat>x;

int a;
string s;

int betesz()
{
    int i,p=0;
    int poz=0;
    for(i=0;i<s.length();++i)
    {
        poz=x[p].m[s[i]];
        if(poz==0)
        {
            x.push_back({});
            x[p].m[s[i]]=x.size()-1;
            poz=x.size()-1;
        }
        x[poz].eddig++;
        p=poz;
    }
    x[p].dbszo++;
}

int kivesz()
{
    int i,p=0;
    int poz=0;
    for(i=0;i<s.length();++i)
    {
        poz=x[p].m[s[i]];
        x[poz].eddig--;
        p=poz;
    }
    x[p].dbszo--;
}

int hanyszor()
{
    int i,p=0;
    int poz=0;
    for(i=0;i<s.length();++i)
    {
        poz=x[p].m[s[i]];
        if(x[poz].eddig) p=poz;
        else break;

    }
    cout<< x[p].dbszo <<"\n";
}

int prefix()
{
    int i,p=0;
    int poz=0;
    for(i=0;i<s.length();++i)
    {
        poz=x[p].m[s[i]];
        if(x[poz].eddig) p=poz;
        else break;
    }
    cout<<i<<"\n";
}

int main()
{
    ios::sync_with_stdio(false);
    x.resize(1);
    while(cin>>a)
    {
        cin>>s;
        //s.push_back(' ');

        if(a==0) betesz();
        else if(a==1) kivesz();
        else if(a==2) hanyszor();
        else prefix();
    }
    return 0;
}