Cod sursa(job #1497752)
| Utilizator | Data | 7 octombrie 2015 11:32:43 | |
|---|---|---|---|
| Problema | Zombie | Scor | 10 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.68 kb |
#include <fstream>
#define dim 1000001
using namespace std;
ifstream fin("zombie.in");
ofstream fout("zombie.out");
int dp[dim],dist[dim],D,N,K,INF,i,sol;
int Search(int val)
{
int st=1;
int dr=i;
int mijl;
while(st<=dr)
{
mijl=st+(dr-st)/2;
if(dist[mijl]>=val)
{
dr=mijl-1;
sol=mijl;
}
else
st=mijl+1;
}
return sol;
}
int main()
{
fin>>D>>N>>K;
INF = 1 << 30;
for(i=1;i<=N;i++)
{
fin>>dist[i];
dp[i]=INF;
}
for(i=1;i<=N;i++)
dp[i]=min(dp[i-1]+1,dp[Search(dist[i]-D+1)-1]+K);
fout<<dp[N];
return 0;
}
