数蝌蚪(构造等差数列)问题,数据规模太大,不知道怎么debug

题目如下:

 

 

 

代码如下:

#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组数据,不知道怎么办诶,请求各位大神解答,摘一个正确的和错误的测试点: