Cod sursa(job #102968)

Utilizator hellraizerChiperi Matei hellraizer Data 14 noiembrie 2007 20:29:28
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Happy Coding 2007 Marime 1.51 kb
#include <stdio.h>
#include <stdlib.h>

#define L_MAX 10001
#define M_MAX 5001

char v[L_MAX];
long long a[M_MAX],k,ultim;
int L,m,n,s;

int comp(const void *b, const void *c){
	return (*(int*)b - *(int*)c );
}

void bin_src(){
	int i, step;
	for (step=1;step<=m;step<<=1);
	for (i=0;step;step>>=1)
		if (i+step<=m && a[i+step]<=k)
			i+=step;
	if (a[i]==k)
		s++;
}
	

/*void bin(int x, int y){
	int z;
	if (x!=y){
		z=(x+y)/2;
		if (a[z]==k)
			s++;
		else
			if (a[z]>k)
				bin(x,z);
			else
				bin(z+1,y);
	}
	else
		if (a[x]==k)
			s++;
}*/	

	

int main(){
	int i;
	char x;
	FILE *fin=fopen("abc2.in","r");
	L=0;
	fscanf(fin,"%c",&v[++L]);
	while (v[L]!='\n'){
		v[L]-='a';
		fscanf(fin,"%c",&v[++L]);
	}
	L--;
	n=0;m=0;
	fscanf(fin,"%c",&x);
	while (x!='\n'){
		n++;
		x-='a';
		a[m]=a[m]*3+x;
		fscanf(fin,"%c",&x);
	}
	if (!feof(fin))
		do{
			m++;
			for (i=1;i<=n;i++){
				fscanf(fin,"%c",&x);
				a[m]=a[m]*3+(x-'a');
			}
			fscanf(fin,"\n");
		}
		while (!feof(fin));
	fclose(fin);
	for (i=1;i<=L;i++)
		printf("%d",v[i]);
	printf("\n");
	for (i=0;i<=m;i++)
		printf("%lld\n",a[i]);
	qsort(a,m+1,sizeof(long long),comp);
	printf("\n");
	for (i=0;i<=m;i++)
		printf("%lld\n",a[i]);
	k=v[1];ultim=1;
	for (i=2;i<=n;i++){
		k*=3;
		k+=v[i];
		ultim*=3;
	}
	bin_src();
	for (i=n+1;i<=L;i++){
		k-=ultim*v[i-n];
		k*=3;
		k+=v[i];
		bin_src();
	}
	FILE *fout=fopen("abc2.out","w");
	fprintf(fout,"%d\n",s);
	fclose(fout);
	return 0;
}