poj 3618

题目:http://acm.pku.edu.cn/JudgeOnline/problem?id=3618

注意没有距离原点等长的两点。

abs()用的极妙;

先前我的代码写了146行,自己都受不了了,而且提交还是错的,郁闷;

后来看了http://ren.javaeye.com/blog/344094  的代码:眼前一亮,没有我之前那么多繁杂的判断。

 

#include<stdio.h>

#include<math.h>

#include<algorithm>

using namespace std;

bool cmp(int a, int b)

{

	return abs(a) < abs(b);

}

int main()

{

	int nMark,i,k,tot,usedTime,mark[50001];

	long long time;

	while(scanf("%lld%d", &time, &nMark)!=EOF)

	{

		mark[0]=0;

		for(i=1; i<=nMark; i++)

			scanf("%d", &mark[i]);

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

		tot = 0;

		usedTime = 0;

		k = 1;

		if(0 == mark[1])

		{

			tot = 1;

			k = 2;

		}

		for(; k<=nMark; k++)

		{

			if(abs(mark[k] - mark[k-1]) <= time - usedTime)

			{

				tot++;

				usedTime += abs(mark[k] - mark[k-1]);

			}

			else

				break;

		}

		printf("%d\n",tot);

	}

	return 0;

}

你可能感兴趣的:(poj)