poj3618
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
#define N 50005
int map[N];
int n;
bool cmp(int a,int b){
return abs(a)<abs(b);
}
int main(){
__int64 sum_t,used_t;
int i,j,ans;
while(cin>>sum_t>>n){
for(i=1;i<=n;i++)
cin>>map[i];//scanf("%I64d",&map[i]);
map[0]=0;
used_t=0;
ans=0;
j=1;
if(map[1]==0)
{
ans++;
j=2;
}
sort(map,map+n+1,cmp);
for(;j<=n;j++){
if(abs(map[j]-map[j-1])<=(sum_t-used_t)){
ans++;
used_t=used_t+abs(map[j]-map[j-1]);
}
else
break;//time已经用完了
}
cout<<ans<<endl;//printf("%d\n",ans);
}
return 0;
}
很巧妙地利用abs函数;
题意就是从0出发,向左或向右走,花费相应的时间;
即每一次判断是向左走更短还是向右,这就是abs函数运用巧妙的地方。
keep moving...

浙公网安备 33010602011771号