题目如下:
代码如下:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
int cmp(const void*_a,const void *_b)
{
int *a=(int*)_a;
int *b=(int*)_b;
return *a-*b;
}
int main()
{
int n,i,k;scanf("%d%d",&n,&k);
long long int cnt=0;
int a[n];for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
a[i]-=i*k;//消除等差数列的差
}
qsort(a,n,sizeof(int),cmp);
if(a[n/2]>=0)//到n个点的距离之和最小的点是最中间两个点的中间的点
{
for(i=0;i<n/2;i++)
cnt+=(a[n/2]-a[i]);
for(i=n/2;i<n;i++)
cnt+=(a[i]-a[n/2]);
}
if(a[n/2]<0)//防止出现负蝌蚪的情况
for(i=0;i<n;i++)
cnt+=abs(a[i]);
printf("%lld",cnt);
}
测试点对了7/10,错了一些,对的那些也是30000组数据,不知道怎么办诶,请求各位大神解答,摘一个正确的和错误的测试点: