Cod sursa(job #102124)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 14 noiembrie 2007 00:07:11
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Happy Coding 2007 Marime 1.12 kb
#include <stdio.h>
#include <string.h>

char s[10000003], a[50003][22], cuv[22];
long nr, contor;
void citire()
{
	freopen("abc2.in","r",stdin);
	freopen("abc2.out","w",stdout);
	fgets(s,10000003,stdin);
	s[strlen(s)-1]=NULL;
	fgets(a[1],22,stdin);
	long n=strlen(a[1]);
	a[1][n-1]=NULL;
	nr=1;
	while (!feof(stdin))
	{
	  fgets(a[++nr],22,stdin);
	  a[nr][n-1]=NULL;
	}
	nr--;
}

void sort()
{
	long ok=1, i;
	char aux[20];
	while (ok)
	{
		ok=0;
		for (i=1; i<nr; i++)
			if (strcmp(a[i],a[i+1])>0) 
			{
				strcpy(aux,a[i]);
				strcpy(a[i],a[i+1]);
				strcpy(a[i+1],aux);
				ok=1;
			}
	}
}

int caut ()
{
	long p, u, m;
	p=1; u=nr;
	m=(p+u)/2;
	while (p<=u)
	{
		if (strcmp(cuv,a[m])==0) return 1;
		else if (strcmp(cuv,a[m])>0) {p=m+1, m=(p+u)/2;}
		else {u=m-1; m=(p+u)/2;}
	}
	return 0;
}

int main()
{
	citire();
	sort();
	long i, n, m;
	m=strlen(a[1]);
	n=strlen(s);
	for (i=0; i<m; i++)
		cuv[i]=s[i]; 
	if (caut()) contor++;
	for (i=m; i<n; i++)
	{	
		strcpy(cuv,cuv+1);
		cuv[m-1]=s[i];
		if (caut()) contor++;
    }

	printf("%ld\n",contor);
	return 0;
}