Cod sursa(job #2822370)

Utilizator lolismekAlex Jerpelea lolismek Data 23 decembrie 2021 21:42:12
Problema Zombie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("zombie.in");
ofstream fout("zombie.out");

const int N = 1e6 + 1;
int v[N], dp[N], last[N]; 
// last[i] = index-ul primului zombie care va ataca daca am face o vraja de tip 2 la timpul zombie-ului i
// dp[i] = minimul de vraji pana la zombie-ul i
// dp[i] = min(dp[i - 1] + 1, dp[last[i] - 1] + k); ori aplicam vraja 1, ori vraja 2
//                                       ^^^^ -1 ,fiindca inclusiv cel de la last[i] va fi eliminat

int main() {
	int d, n, k;
	fin >> d >> n >> k;
	for (int i = 1; i <= n; i++) fin >> v[i];
	int p = 1;
	for (int i = 1; i <= n; i++) {
		while (v[p] + d < v[i]) p++;
		last[i] = p;
	}
	dp[1] = 1;
	for (int i = 2; i <= n; i++)
		dp[i] = min(dp[i - 1] + 1, dp[last[i] - 1] + k);
	fout << dp[n];
	return 0;
}