把bj-bi=j-i改为bj-j=bi-i
所以把所有数组排序后,第i个数减去i,然后题目变为把所有数变得相同的最小代价
取中位数即可
所以把所有数组排序后,第i个数减去i,然后题目变为把所有数变得相同的最小代价
取中位数即可
程序代码:#include <iostream>
#include <cstdlib>
using namespace std;
int a[100000],n;
int cmp(const void *a,const void *b)
{
return *((int*)a)-*((int*)b);
}
int main()
{
cin>>n;
for (int i=0; i<n; i++) cin>>a[i];
qsort(a,n,sizeof(a[0]),cmp);
for (int i=0; i<n; i++) a[i]-=i;
qsort(a,n,sizeof(a[0]),cmp);
int mid=(n-1)/2;
long long ans=0;
for (int i=0; i<n; i++) ans+=abs(a[i]-a[mid]);
cout<<ans<<endl;
}