题意: 从0点开始走,每次走到离原点最近的点。
思路: 将所有点按绝对值排序,计算每个点差值叠加到符合条件。
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
bool cmp (int a,int b)
{
return abs(a)<abs(b);从绝对值小到大排列不改变符号
}
int p[50010];
int main()
{
int i,n,a;
long long t,j;
scanf("%lld%d",&t,&n);
for(i=0;i<n;i++)
scanf("%d",&p[i]);
sort(p,p+n,cmp);
j=0;a=0;int count=0;
for(i=0;i<n;i++)
{
j+=abs(p[i]-a);
count++;
a=p[i]; //每次记录下上次的点,待会求两点差值可用。
if(j>t)
{
printf("%d\n",count-1);
break;
}
}
return 0;
}