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;
}
/**************************************************************************
                 
原文来自博客园——Submarinex的博客: www.cnblogs.com/submarinex/               
 
*************************************************************************/

浙公网安备 33010602011771号