Pagini recente » Istoria paginii preoni-2007/runda-4/solutii | Cod sursa (job #1953384) | Cod sursa (job #2754062) | Cod sursa (job #2981652) | Cod sursa (job #100353)
Cod sursa(job #100353)
#include<stdio.h>
#include<string.h>
struct nod{
nod *a;
nod *b;
nod *c;
};
char txt[10000100],cuv[25],*p,*q,*aux;
size_t lt,lc,i;
long int cont;
nod *rad;
void insert(char *pp,nod *rr);
long int search(char *pp,nod *rr);
int main()
{
FILE *f,*g;f=fopen("abc2.in","r");g=fopen("abc2.out","w");
fscanf(f,"%s",txt);lt=strlen(txt);
rad =new nod;rad->a=0;rad->b=0;rad->c=0;
fscanf(f,"%s",cuv);lc=strlen(cuv);insert(cuv,rad);
while(fscanf(f,"%s",cuv)!=EOF)insert(cuv,rad);
p=txt;q=p+lc;
for(i=0;i<=lt-lc;i++)
{ *aux=*q;
*q=0;
cont+=search(p,rad);
*q=*aux;
p++;
q++;
}
fprintf(g,"%ld\n",cont);
fcloseall();
return 0;
}
void insert(char *pp,nod *rr)
{ nod *rrr;
if(*pp=='a')
{ if(!rr->a)
{ rrr=new nod;rrr->a=0;rrr->b=0;rrr->c=0;rr->a=rrr;}
insert(pp+1,rr->a);
return;
}
if(*pp=='b')
{ if(!rr->b)
{ rrr=new nod;rrr->a=0;rrr->b=0;rrr->c=0;rr->b=rrr;}
insert(pp+1,rr->b);
return;
}
if(*pp=='c')
{ if(!rr->c)
{ rrr=new nod;rrr->a=0;rrr->b=0;rrr->c=0;rr->c=rrr;}
insert(pp+1,rr->c);
return;
}
}
long int search(char *pp,nod *rr)
{
if(*pp=='a')
{ if(!rr->a) return 0;
return search(pp+1,rr->a);
}
if(*pp=='b')
{ if(!rr->b) return 0;
return search(pp+1,rr->b);
}
if(*pp=='c')
{ if(!rr->c) return 0;
return search(pp+1,rr->c);
}
return 1;
}