Cod sursa(job #637880)

Utilizator sebii_cSebastian Claici sebii_c Data 20 noiembrie 2011 17:19:20
Problema Zombie Scor 0
Compilator c Status done
Runda .com 2011 Marime 0.81 kb
#include <stdio.h>
#define NMAX 1000001

int time[NMAX], cost[NMAX];

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

int binary_search(int lo, int hi, int key)
{
	int mid;
	do {
		mid = (lo + hi) >> 1;
		if (key > time[mid])
			lo = mid + 1;
		else
			hi = mid;
	} while (lo < hi);
	return hi;
} 

int main()
{
	freopen("zombie.in", "r", stdin);
	freopen("zombie.out", "w", stdout);

	int D, N, K, i;
	scanf("%d %d %d", &D, &N, &K);
	if (N == 1) {
		printf("1\n");
		return 0;
	}

	for (i = 1; i <= N; ++i) {
		scanf("%d", &time[i]);	
		int pos = binary_search(1, i - 1, time[i] - D + 1);
		if (pos < i && time[pos] >= time[i] - D + 1)
			cost[i] = min(cost[i - 1] + 1, cost[pos - 1] + K);
		else 
			cost[i] = cost[i - 1] + 1;
	}
	
	printf("%d\n", cost[N]);
	return 0;
}