Cod sursa(job #1934148)

Utilizator NuamcontJohn George Nuamcont Data 21 martie 2017 10:52:36
Problema Trie Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <iostream>
#include<fstream>
#include<cstring>
using namespace std;
struct  nod
{
    int info,nrfii;
    nod *fii[26];
} *rad;
int t;
char s[21];
ifstream f("trie.in");
ofstream g("trie.out");
void adauga(char s[21],nod *r)
{
    int l=strlen(s);
    for(int i=0; i<l; i++)
    {
        nod *p=r->fii[s[i]-'a'];
        if(!p)
        {
            nod* q=new nod;
            r->fii[s[i]-'a']=q;
            q->info=0;
            q->nrfii=0;
            r->nrfii++;
        }
        r=p;
    }
    r->info++;
}
int sterge(char s[21],nod *r)
{
    if(!s) r->info--;
    if(sterge(s+1,r->fii[s[0]-'a'])){r->nrfii--;r->fii[s[0]-'a']=0;}
    if(!r->info && !r->nrfii && r!=rad) {delete r; return 1;}
    return 0;
}
void aparitii(char s[26],nod*r)
{
    int l=strlen(s);
    for(int i=0; i<l; i++)
        r=r->fii[s[i]-'a'];
    g<<r->info<<endl;
}
void prefix(char s[26], nod* r)
{
    int l=strlen(s),i;
    for(i=0; i<l; i++)
        if(r->fii[s[i]-'a'])
            r=r->fii[s[i]-'a'];
        else break;
    g<<i+1<<endl;
}
int main()
{
    rad=new nod;
    rad->info=0;
    rad->nrfii=0;
    while(f>>t)
    {
        f>>s;
        if(t==0) adauga(s,rad);
        else if(t==1) sterge(s,rad);
        else if(t==2) aparitii(s,rad);
        else prefix(s,rad);
    }
    return 0;
}