Cod sursa(job #2689621)

Utilizator eugen5092eugen barbulescu eugen5092 Data 21 decembrie 2020 17:49:37
Problema Trie Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.72 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=new nod;//radacina

string s;
int c;

void c0(){
    int r,p=s.length();
    nod *cap=a;

    for(int i=0;i<=p-1;i++){
        //cout<<i<<"\n";
        char t=s[i];
        r=t-'a'+1;
        //cout<<(cap->urm[r]==NULL)<<"ceva \n";
        if(cap->urm[r]==NULL){
            nod *aux=new nod;
            for(int j=1;j<=26;j++){
                aux->urm[j]=NULL;
            }
            aux->x=0;
            cap->urm[r]=aux;
        }
        cap=cap->urm[r];
        cap->x++;
    }

    cap->ap++;
}

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

    cou<<cap->ap<<"\n";
}
void c3(){
    int r,p=s.length();
    nod *cap=a;
    for(int i=0;i<=p-1;i++){

        char t=s[i];
        r=t-'a'+1;

        cap=cap->urm[r];
        if(cap==NULL||cap->x==0){
            cou<<i<<"\n";
            return;
        }
    }
}

void citire(){
    for(int j=1;j<=26;j++){
        a->urm[j]=NULL;
    }
    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()
{
    citire();
    return 0;
}