Pagini recente » Cod sursa (job #2447076) | Cod sursa (job #686870) | Cod sursa (job #2927375) | Cod sursa (job #1910094) | Cod sursa (job #105086)
Cod sursa(job #105086)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char *v,*dic;
int *este,prec[3];
long nr,i,test,cate,j;
FILE *in,*out;
in=fopen("abc2.in","r");
out=fopen("abc2.out","w");
v=(char *)malloc(10000002*sizeof(char));
fgets(v,10000002,in);
v[strlen(v)-1]='\0';
//printf("%s\n",v);
dic=(char *)malloc(22*sizeof(char));
este=(int *)malloc(strlen(v)*sizeof(int));
for(i=0;i<(long)strlen(v);i++)
este[i]=0;
nr=0;
while(fgets(dic,22,in)!=NULL)
{
cate=strlen(dic);
if(dic[cate-1]=='\n')
cate--;
dic[cate]='\0';
//printf("%d %s ",cate,dic);
//aux=v;
//vcopy=v;
prec[0]=cate;
prec[1]=cate;
prec[2]=cate;
//prec[dic[cate-2]-'a']=1;
test=0;
for(i=cate-2;i>=0 && test<3;i--)
if(prec[dic[i]-'a']==cate)
{
prec[dic[i]-'a']=cate-i-1;
test++;
}
//printf("%d %d %d\n",prec[0],prec[1],prec[2]);
test=cate-1;
//***
while(test<strlen(v))
{
j=test;
i=cate-1;
while(dic[i]==v[i] && i>=0 )
{
if(este[test-cate+1]==1)
i=-2;
i--;
j--;
}
if(i==-3)
break;
if(i<0 && este[j+1]==0)
{
nr++;
este[j+1]=1;
}
test+=prec[v[test]-'a'];
}
//***
}
fprintf(out,"%ld\n",nr);
free(v);
free(este);
free(dic);
fclose(in);
fclose(out);
return 0;
}