Cod sursa(job #2051634)

Utilizator bucuralexandraioana05Bucur Alexandra bucuralexandraioana05 Data 29 octombrie 2017 12:55:16
Problema Trie Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.57 kb
#include <iostream>
#include<fstream>
#include<string.h>

using namespace std;

ifstream f("trie.in");
ofstream g("trie.out");

struct nod
{
    int nr=0, nrfii=0;
    nod *fii[26]={0};
};

void adauga( char cuv[23], nod *p)
{
    int x;
    if (cuv[0]==0)
    { p->nr++; return;} ///am ajuns la finalul cuvantului
    x=cuv[0]-'a';
    if (p->fii[x] == 0)
    {
            p->fii[x]= new nod;
            p->nrfii++;
    }
    adauga(cuv+1, p->fii[x]);

}

void sterge( char cuv[23], nod *p)
{
    int x;
    if(cuv[0]==0)
    {
        p->nr--;
        return;
    }
    else
    {   x=cuv[0]-'a';
        sterge(cuv+1,p->fii[x]);
        if(p->fii[x]->nrfii==0 && p->fii[x]->nr==0)
        {
            delete p->fii[x];
            p->fii[x]=0;
            p->nrfii--;
        }
    }
}
int nr_aparitii(char cuv[23], nod *p)
{
    int x;
    if( cuv[0]==0)
        return p->nr;
    else
    {
        x=cuv[0]-'a';
        if(p->fii[x]==0) return 0;
        nr_aparitii(cuv+1, p->fii[x]);
    }
}
int prefix_max( char cuv[23], nod *p)
{
     int x;
     if(cuv[0]==0)
        return 0;
    x=cuv[0]-'a';
    if (p->fii[x]==0)
            return 0;
    return 1+prefix_max(cuv+1, p->fii[x]);
}
int task;
char cuv[23];
nod *G;
int main()
{
    G=new nod;
    while(f>>task)
    {
        f>>cuv;
        if(task==0) adauga(cuv,G);
        if(task==1) sterge(cuv,G);
        if(task==2) g<<nr_aparitii(cuv,G)<<'\n';
        if(task==3) g<<prefix_max(cuv,G)<<'\n';
    }

    f.close();
    g.close();
    return 0;
}