Pagini recente » Cod sursa (job #2640368) | Cod sursa (job #1011157) | Cod sursa (job #1312336) | Cod sursa (job #1852505) | Cod sursa (job #239156)
Cod sursa(job #239156)
#include <stdio.h>
#include <string.h>
struct trie
{
int info,nr;
trie *urm[26];
};
trie *x;
char s[21];
void add()
{
int m=strlen(s),i;
trie *A;
A=x;
for (i=0;i<m;i++)
{
if (x->urm[s[i]-'a']==NULL) {
trie *q;
q = new trie;
q->info = 0;
q->nr=1;
for (int j = 0;j<26;j++) q->urm[j]=NULL;
x->urm[s[i]-'a'] = q;
x = q;
}
else x=x->urm[s[i]-'a'],x->nr++;
}
x->info++;
x=A;
}
void del()
{
int m = strlen(s),i;
trie *A;
A=x;
for (i=0;i<m;i++) A = A->urm[s[i]-'a'],A->nr--;
A->info--;
}
FILE *out = fopen("trie.out","w");
void part()
{
int m = strlen(s),i;
trie *A;
A = x;
for (i=0;i<m && A!=NULL;i++) A = A->urm[s[i]-'a'];
if (A!=NULL) fprintf(out,"%d\n",A->info);
else fprintf(out,"0\n");
}
void prefix()
{
int m=strlen(s),i,nr=0;
trie *A;
A = x;
for (i=0;i<m && A!=NULL;i++) {
if (A->nr>=2) nr = i+1;
A = A->urm[s[i]-'a'];
}
fprintf(out,"%d\n",nr);
}
int main()
{
FILE *in = fopen("trie.in","r");
x = new trie;
x->info = 0;
for (int i = 0;i<26;i++) x->urm[i] = NULL;
int n;
while (!feof(in))
{
fscanf(in,"%d %s\n",&n,s);
if (n==0) add();
else if (n==1) del();
else if (n==2) part();
else prefix();
}
}