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/               
 
*************************************************************************/