Cod sursa(job #637897)

Utilizator sebii_cSebastian Claici sebii_c Data 20 noiembrie 2011 17:24:31
Problema Zombie Scor 100
Compilator cpp Status done
Runda .com 2011 Marime 0.81 kb
#include <fstream>
using namespace std;

#define NMAX 1000002

int tzombie[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 > tzombie[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 >> tzombie[i];
		int pos = binary_search(1, i - 1, tzombie[i] - D + 1);
		if (pos < i && tzombie[pos] >= tzombie[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;
}