Cod sursa(job #1934213)

Utilizator NuamcontJohn George Nuamcont Data 21 martie 2017 11:43:14
Problema Trie Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 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)
{
    if(!s[0])
    {
        r->info++;
        return ;
    }
    if(!r->fii[s[0]-'a']) {
        nod* q=new nod;
        q->info=0;
        q->nrfii=0;
        r->fii[s[0]-'a']=q;
        r->nrfii++;
    }
    adauga(s + 1, r->fii[s[0]-'a']);
}
int sterge(char s[21],nod *r)
{
    if(!s[0]) r->info--;
    else if(sterge(s+1,r->fii[s[0]-'a']))
    {
        r->fii[s[0]-'a']=0;
        r->nrfii--;
    }
    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 && r != 0; i++)
        r=r->fii[s[i]-'a'];
    if(r==0)
        g<<"0\n";
    else
        g<<r->info<<'\n';
}
*/
void prefix(char s[21], 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<<'\n';
}
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;
}