Pagini recente » Cod sursa (job #2204119) | Cod sursa (job #1459749) | Cod sursa (job #596889) | Cod sursa (job #297754) | Cod sursa (job #1204534)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
FILE *f=fopen("trie.in","r");
FILE *g=fopen("trie.out","w");
bool ok=true;
struct trie{int cnt;int nrfii;
trie *fii[26]={0};
trie() {memset(fii,0,26);
cnt=0;nrfii=0;};
};
trie *t=new trie;
inline void update(char s[25],int val)
{int i=0,lit=0;
trie *p=t;
while (i<strlen(s)) {lit=s[i]-'a';
if (p->fii[lit]==NULL) {trie *k=new trie;
p->nrfii+=val;
p->fii[lit]=k;
}
p=p->fii[lit];
i++;
}
p->cnt+=val;
}
inline void caut(char s[25])
{int i=0,lit=0;
trie *p=t;
while (i<strlen(s)) {lit=s[i]-'a';
if (p->fii[lit]==NULL) {fprintf(g,"0\n");
return;
}
p=p->fii[lit];
i++;
}
fprintf(g,"%d\n",p->cnt);
}
inline int ma(char s[25])
{int i=0,maxim=0,lit=0;
trie *p=t;
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;
}
return maxim;
}
int main()
{int i,j,op,lit;
char s[25]={0};
while (ok==true) {fscanf(f,"%d",&op);
fill(s,s+25,0);
fscanf(f,"%s",&s);
if (s[0]==NULL) {ok=false;break;}
if (op==0) {update(s,1);
}else
if (op==1) {update(s,-1);
}else
if (op==2) {caut(s);
}else
if (op==3) {fprintf(g,"%d\n",ma(s));}
}
return 0;
}