Cod sursa(job #105099)

Utilizator vlad3rsterian vladut vlad3r Data 17 noiembrie 2007 00:42:16
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Happy Coding 2007 Marime 1.29 kb
#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=(long)strlen(dic);
		if(dic[cate-1]=='\n')
			cate--;
		dic[cate]='\0';
		
		//printf("%d %s ",cate,dic);

		prec[0]=cate;
		prec[1]=cate;
		prec[2]=cate;

		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<(long)strlen(v))
		{
			j=test;
			i=cate-1;

			while(dic[i]==v[j] && i>=0 )
			{
				i--;
				j--;
			}
			if(i==-1 && este[j+1]==1)
				break;
			if(i<0 && este[j+1]==0)
			{
				nr++;
				este[j+1]=1;
			}
			test+=prec[v[test]-'a'];
		}
		//printf("-%d- ",nr);

	}

	fprintf(out,"%ld\n",nr);

	free(v);
	free(este);
	free(dic);
	fclose(in);
	fclose(out);


	return 0;
}