Cod sursa(job #1204527)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 3 iulie 2014 10:24:46
Problema Trie Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 3.32 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
FILE *f=fopen("trie.in","r");
FILE *g=fopen("trie.out","w");
struct trie{int cnt=0;int nrfii=0;
            trie *fii[26]={0};};
bool ok=true;
char s[25];


trie *t=new trie;



int main()
{int i,j,op,lit;

while (ok==true) {fscanf(f,"%d",&op);
                  fill(s,s+20,0);
                  fscanf(f,"%s",&s);
                  if (s[0]==NULL) {ok=false;break;}

                  if (op==0) {trie *p=t;
                              i=0;
                              while (i<strlen(s)) {lit=s[i]-'a';
                                                   if (p->fii[lit]==NULL) {trie *k=new trie;
                                                                           p->nrfii++;
                                                                           p->fii[lit]=k;
                                                                           }
                                                   p=p->fii[lit];
                                                   i++;
                                                   }
                              p->cnt++;
                              }else

                  if (op==1) {trie *p=t;
                              i=0;
                              while (i<strlen(s)) {lit=s[i]-'a';
                                                   if (p->fii[lit]==NULL) {trie *k=new trie;
                                                                           p->nrfii++;
                                                                           p->fii[lit]=k;
                                                                           }
                                                   p=p->fii[lit];
                                                   i++;
                                                   }
                              p->cnt--;
                              }else

                  if (op==2) {trie *p=t;
                              i=0;
                              while (i<strlen(s)) {lit=s[i]-'a';
                                                   if (p->fii[lit]==NULL) {fprintf(g,"0\n");
                                                                           break;
                                                                           }
                                                   p=p->fii[lit];
                                                   i++;
                                                   }
                              fprintf(g,"%d\n",p->cnt);
                              }else

                  if (op==3) {trie *p=t;
                              int maxim=0;

                              i=0;
                              while (i<strlen(s)) {lit=s[i]-'a';
                                                   if (p->fii[lit]==NULL) {break;}

                                                   p=p->fii[lit];


                                                   i++;
                                                   if ((p->nrfii)!=0) maxim=i;
                                                   if ((p->cnt)!=0) maxim=i;
                                                   }
                              fprintf(g,"%d\n",maxim);
                              }

                  }


return 0;
}