Cod sursa(job #636826)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 20 noiembrie 2011 00:05:33
Problema Zombie Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 0.8 kb
#include<stdio.h>

#define maxn 1000005

FILE*f=fopen("zombie.in","r");
FILE*g=fopen("zombie.out","w");

int d,n,k,i,st,pmin,p,front,back;
int D[maxn],v[maxn],deque[maxn];

inline void insert_deque ( int poz ){
	
	while ( front <= back && D[poz] < D[deque[front]] ){
		--back;
	}
	deque[++back] = poz;
}

inline int front_deque () {
	
	while ( deque[front] < p - 1 && front <= back )	++front;
	return deque[front];
}

int main () {
	
	fscanf(f,"%d %d %d",&d,&n,&k); st = -k;
	
	front = 1;
	for ( i = 1 ; i <= n ; ++i ){
		++st; if ( st > 0 )	insert_deque(st);
		fscanf(f,"%d",&v[i]);
		D[i] = D[i-1] + 1;
		while ( v[i] - v[p] > d ) ++p;
		pmin = front_deque();
		if ( pmin && D[pmin] + k < D[i] ){
			D[i] = D[pmin] + k;
		}
	}
	
	fprintf(g,"%d\n",D[n]);
	
	fclose(f);
	fclose(g);
	
	return 0;
}