Cod sursa(job #636575)

Utilizator SmarandaMaria Pandele Smaranda Data 19 noiembrie 2011 21:22:51
Problema Zombie Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 1.46 kb
#include<cstdio>
#include<vector>
using namespace std;
long n,d,k,i;
long a[1000001];
long c[1000001];
long ind[1000001];
long f[125000001];
void read () {
	long i;
	//unsigned long B,b;
	//vector <long> v;
	scanf("%ld%ld%ld",&d,&n,&k);
	for (i=1;i<=n;i++) {
		scanf("%ld",&a[i]);
		/*if (a[i]-a[(*(v.begin()))]<=d)
			ind[i]=*(v.begin());
		else
			while (!v.empty()) {
				v.erase(v.begin(),v.begin()+1);
				if (a[i]-a[(*(v.begin()))]<=d) {
					ind[i]=*(v.begin());
					break;
				}
			}
		v.push_back(i);*/
	/*	B=a[i]>>3;
		b=a[i]&7;
		f[B]=f[B]|(1u<<3);
		ind[i]=d-a[i]-1;
		B=*/
	}
}

/*long cautbin (long st , long dr) {
	long m,min2_rasengan=2000000000,i;
	i=dr;
	while (st<=dr && st<=i && dr<=i && m!=i) {
		m=(st+dr)/2;
		if (a[i]-a[m]>d)
			st=m+1;
		else
			if (m<=min2_rasengan && m!=i) {
				min2_rasengan=c[m];
				dr=m-1;
			}
	}
	return min2_rasengan;
}
*/
void rez() {
	long i,rasengan,min=d,rasengan2,min_rasengan2,j;
	vector <long> v;
	vector <long> :: iterator it;
	v.push_back(0);
	for (i=1;i<=n;i++) {
		rasengan=c[i-1]+1;
		while (!v.empty() && a[i]-a[(*(v.begin()))]>d) {
			v.erase(v.begin(),v.begin()+1);
		}
		min_rasengan2=c[(*v.begin())];
		if (rasengan<min_rasengan2+k)
			c[i]=rasengan;
		else
			c[i]=min_rasengan2+k;
		v.push_back(i);
	}
	printf("%ld\n",c[n]);
}

int main () {
	
	freopen("zombie.in","r",stdin);
	freopen("zombie.out","w",stdout);
	
	read();
	rez();
	return 0;
}