Cod sursa(job #2391873)

Utilizator SchnitzelMannPavaloiu Gabriel SchnitzelMann Data 29 martie 2019 12:32:42
Problema Trie Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("trie.in");
ofstream out("trie.out");
string str;
struct trie
{
    int s,nr,u[30];
}gol;
vector<trie> v;
void baga(int p,int nr,int s)
{
    v[nr].s+=s;
    if(p==str.size())
    {
        v[nr].nr+=s;
        return;
    }
    if(!v[nr].u[str[p]-'a'])
    {
        v.push_back(gol);
        v[nr].u[str[p]-'a']=v.size()-1;
    }
    baga(p+1,v[nr].u[str[p]-'a'],s);
}
int q1(int p,int nr)
{
    if(p==str.size())
        return v[nr].nr;
    if(v[nr].u[str[p]-'a'])
        return q1(p+1,v[nr].u[str[p]-'a']);
    return 0;
}
int q2(int p,int nr)
{
    if(p==str.size())
        return bool(v[nr].s)*p;
    if(!v[nr].s)
        return max(p-1,0);
    if(v[nr].u[str[p]-'a'])
        return max(p,q2(p+1,v[nr].u[str[p]-'a']));
    return p;
}
int main()
{
    int nr;
    v.push_back(gol);
    while(in>>nr>>str)
    {
        if(!nr)
            baga(0,0,1);
        else if(nr==1)
            baga(0,0,-1);
        else if(nr==2)
            out<<q1(0,0)<<"\n";
        else
            out<<q2(0,0)<<"\n";
    }    
    return 0;
}