Cod sursa(job #637858)

Utilizator bog29Antohi Bogdan bog29 Data 20 noiembrie 2011 17:11:51
Problema Zombie Scor 30
Compilator cpp Status done
Runda .com 2011 Marime 1.03 kb
#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;
}