每次一个人到离原点最近的一个景点(有正负)求最多能经过多少个景点?


/*
 * POJ_3618.cpp
 *
 *  Created on: 2013年11月26日
 *      Author: Administrator
 */


#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>

using namespace std;

const int maxn  = 50005;

int mark[maxn];

bool cmp(int a,int b){//***abs()用得妙....
	return abs(a) < abs(b);
}
int main(){
	int t,n;
	while(scanf("%d%d",&t,&n)!=EOF){
		memset(mark,0,sizeof(mark));

		int i;
		for(i = 1 ; i <= n ; ++i){
			scanf("%d",&mark[i]);
		}

		sort(mark+1,mark+1+n,cmp);

		int k = 1;
		int total = 0;
		if(mark[1] == 0){
			total = 1;
			k++;
		}

		int use_time = 0;
		for(; k <= n ; ++k){
			if(abs(mark[k] - mark[k-1]) <= t -use_time){//如果时间还够去下一个景点...
				total++;
				use_time += abs(mark[k] - mark[k-1]);
			}else{
				break;
			}
		}

		printf("%d\n",total);
	}

	return 0;
}