Cod sursa(job #99149)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 10 noiembrie 2007 22:15:44
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Happy Coding 2007 Marime 1.07 kb
#include <stdio.h>
#include <string.h>

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

void sort()
{
	int 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 ()
{
	int 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();
	int i, j, n, m;
	m=strlen(a[1]);
	n=strlen(s);
	for (i=0; i<=n-m; i++)
	{	for (j=i; j<i+m; j++)
		   cuv[j-i]=s[j];
		if (caut()) contor++;
        }

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