把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; }