Cod sursa(job #637895)

Utilizator sebii_cSebastian Claici sebii_c Data 20 noiembrie 2011 17:23:14
Problema Zombie Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 0.8 kb
#include <fstream>
using namespace std;

#define NMAX 1000002

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()
{
	ifstream fin("zombie.in");
	ofstream fout("zombie.out");

	int D, N, K, i;
	fin >> D >> N >> K;
	if (N == 1) {
		printf("1\n");
		return 0;
	}

	for (i = 1; i <= N; ++i) {
		fin >> 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;
	}
	
	fout << cost[N];
	return 0;
}