Cod sursa(job #1204527)
Utilizator | 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;
}