Cod sursa(job #638236)

Utilizator maritimCristian Lambru maritim Data 20 noiembrie 2011 19:45:21
Problema Zombie Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 0.92 kb
#include<stdio.h>
#include<ctype.h>

#define MaxN 1000100
#define ll long long

int N,D,K,A[MaxN];
ll B[MaxN];
char S[20*MaxN];

void citire(void)
{
	int i;
	FILE *f = fopen("zombie.in","r");
	
	fscanf(f,"%d %d %d",&D,&N,&K);
	fgets(S,sizeof(S),f);
	for(int j=0;S[j];j++)
		if(isdigit(S[j]))
		{
			i ++;
			while(isdigit(S[j])) A[i] = A[i]*10 + S[j++]-'0';
		}
	
	fclose(f);
}

int binary_search(int li,int ls,int a)
{
	if(li <= ls)
		if(A[(li+ls)/2] == a)
			return (li+ls)/2-1;
		else if(A[(li+ls)/2] > a)
			return binary_search(li,(li+ls)/2-1,a);
		else
			return binary_search((li+ls)/2+1,ls,a);
	return ls;
}

ll min(ll a,ll b)
{
	return a < b ? a:b;
}

int zombie(void)
{
	for(int i=1;i<=N;i++)
		B[i] = min(B[i-1]+1,B[binary_search(1,i-1,A[i]-D)]+K);
}

int main()
{
	FILE *g = fopen("zombie.out","w");
	
	citire();
	zombie();
	fprintf(g,"%d ",B[N]);
	
	fclose(g);
	return 0;
}