Cod sursa(job #637819)

Utilizator sebii_cSebastian Claici sebii_c Data 20 noiembrie 2011 16:56:02
Problema Zombie Scor 0
Compilator c Status done
Runda .com 2011 Marime 0.8 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 val, int high)
{
	int lo = 1, hi = high;
	int mid, pos = high;
	while (lo <= hi) {
		mid = lo + (hi - lo) / 2;
		if (time[mid] >= val) {
			pos = mid;
			hi = mid - 1;
		}
		else
			lo = mid + 1;
	}
	return pos;
} 

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]);
	
	for (i = 1; i <= N; ++i) {
		int pos = binary_search(time[i] - D + 1, i);
		cost[i] = min(cost[i - 1] + 1, cost[pos - 1] + K);
	}
	
	printf("%d\n", cost[N]);
	return 0;
}