Cod sursa(job #2690180)

Utilizator eugen5092eugen barbulescu eugen5092 Data 23 decembrie 2020 12:53:54
Problema Trie Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.02 kb
#include <bits/stdc++.h>
using namespace std;
ifstream ci("trie.in");
ofstream cou("trie.out");

struct nod{
   int x;
   int ap;
   nod *urm[26];
};

nod *a;//radacina

string s;
int c;

void init(){
    a=new nod;
    a->x=0;
    a->ap=0;
    for(int j=1;j<=26;j++){
        a->urm[j]=NULL;
    }
}

void c0(){
    int r,h=s.length()-1;
    nod *p=a;
    nod *q;
    //cout<<"k \n";
    for(int i=0;i<=h;i++){
        r=s[i]-'a'+1;
        if(p->urm[r]!=NULL){
            p=p->urm[r];
            (p->x)++;
        }else{
            q=new nod;
            q->ap=0;
            q->x=1;
            for(int j=1;j<=26;j++){
                q->urm[j]=NULL;
            }
            p->urm[r]=q;
            p=q;
        }
    }
    (p->ap)++;
    (p->x)++;
}

void c1(){
    int r,p=s.length()-1;
    nod *cap=a;
    for(int i=0;i<=p;i++){
        char t=s[i];
        r=t-'a'+1;
        cap=cap->urm[r];
        (cap->x)--;
    }
    (cap->ap)--;
    (cap->x)--;
}
void c2(){
    int r,p=s.length();
    nod *cap=a;
    for(int i=0;i<=p-1;i++){

        char t=s[i];
        r=t-'a'+1;
        if(cap->urm[r]==NULL){
            cou<<"0 \n";
            return;
        }
        cap=cap->urm[r];
    }
    cou<<cap->ap<<"\n";
}
void c3(){
    int r,p=s.length();
    nod *cap=a;
    int lng=0;
    for(int i=0;i<=p-1;i++){

        char t=s[i];
        r=t-'a'+1;
        if(cap->urm[r]==0){
            cou<<lng<<"\n";
            return;
        }
        lng++;
        cap=cap->urm[r];
        if(cap->x==0){
            cou<<lng-1<<"\n";
            return;
        }
    }
    cou<<lng<<"\n";
}

void citire(){

    while(ci>>c){
        ci>>s;
        //cout<<c<<" "<<s<<"\n";
        if(c==0){
            c0();
        }
        if(c==1){
            //c1();
        }
        if(c==2){
            //c2();
        }
        if(c==3){
            //c3();
        }
    }
}

int main()
{
    init();
    citire();
    return 0;
}