Pagini recente » Cod sursa (job #596728) | Cod sursa (job #2789925) | Cod sursa (job #2944833) | Cod sursa (job #863843) | Cod sursa (job #637858)
Cod sursa(job #637858)
#include<fstream>
#include<deque>
#define dmax 1000003
using namespace std;
ifstream in("zombie.in");
ofstream out("zombie.out");
int n, x[dmax], k, y[dmax];
long long mn[dmax], lng;
deque<int>dq;
deque<int>::iterator it;
int main()
{
int i, poz;
in>>lng>>n>>k;
for(i=1; i<=n; i++)
in>>x[i];
in.close();
dq.push_back(n);
poz = n;
while(x[n] - x[poz-1] < lng && poz-1>0)
{ poz--;
dq.push_front(poz);
}
y[n] = n-dq.front()+1;
for(i=n-1; i>0; i--)
{
dq.pop_back();
if(dq.empty() )
{ dq.push_back(i);
poz--;
}
while(x[dq.back()] - x[poz-1] < lng && poz-1>0)
{
poz--;
dq.push_front(poz);
}
y[i] = dq.back()-dq.front()+1;
/*for(it = dq.begin(); it!=dq.end(); it++)
out<<*it<<" ";
out<<'\n';*/
}
//for(i=1; i<=n; i++)
//out<<y[i]<<" ";
for(i=1; i<=n; i++)
{
poz = i-y[i];
if(poz<0)
poz=0;
mn[i] = min(mn[i-1]+1, mn[poz]+k);
}
out<<mn[n];
out.close();
return 0;
}