Cod sursa(job #2482302)

Utilizator roberttrutaTruta Robert roberttruta Data 28 octombrie 2019 00:22:12
Problema Trie Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <cstring>
using namespace std;
int i,n,t,nr,x,a,p,u[150005];
char c[30];
struct vct
{
    int x,y;
}v[150005][27];
void add()
{
    for(i=0;i<n;i++)
    {
        a=c[i]-'a'+1;
        if(!v[p][a].y)
        v[p][a].x=++t;
        v[p][a].y++;
        p=v[p][a].x;
    }
    u[p]++;
}
void del()
{
    for(i=0;i<n;i++)
    {
        a=c[i]-'a'+1;
        v[p][a].y--;
        p=v[p][a].x;
    }
    u[p]--;
}
int qry()
{
    for(i=0;i<n;i++)
    {
        a=c[i]-'a'+1;
        p=v[p][a].x;
    }
    return u[p];
}
int pref()
{
    for(i=0;i<n;i++)
    {
        a=c[i]-'a'+1;
        if(v[p][a].y!=0)
        nr++;
        else
        break ;
        p=v[p][a].x;
    }
    return nr;
}
int main()
{
    ifstream f("trie.in");
    ofstream g("trie.out");
    t=1;
    while(f>>x)
    {
        f>>c;
        n=strlen(c); p=1; nr=0;
        if(x==0)
        add();
        if(x==1)
        del();
        if(x==2)
        g<<qry()<<'\n';
        if(x==3)
        g<<pref()<<'\n';
    }

    return 0;
}