Pagini recente » Arhiva de probleme | Cod sursa (job #2145965) | Cod sursa (job #2594554) | Cod sursa (job #2594525) | Cod sursa (job #2105730)
#include <fstream>
using namespace std;
ifstream fin("zombie.in");
ofstream fout("zombie.out");
int d,n,k,i,v[1000001],moment[1000001],D[1000001];
int main()
{
fin >> d >> n >> k;
for (i=1; i<=n; i++)
fin >> v[i];
///folosesc rasenshuriken cand primul zombie din linia de zombie
///pe care ii distrug este cat mai aproape posibil de mine
///deci momentul in care il folosesc este primul j, j <= i
///cu v[j]+d > v[i], ca v[i] sa fie pe strada
int poz = 1;
moment[1] = 1;
for (i=2; i<=n; i++)
{
while (poz <= i && v[poz]+d <= v[i])
poz++;
moment[i] = poz;
}
///D[i] = nr minim de chakra pentru a distruge i zombie
for (i=1; i<=n; i++)
D[i] = min(D[i-1]+1, D[moment[i]-1]+k);
fout << D[n];
return 0;
}