可以看成点集{a[i]-i}和b之间距离的和,于是找到中位数就可以直接算了2333.
#include<bits/stdc++.h> #define ll long long using namespace std; const int N=200005; int a[N],n,num; ll ans=0; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",a+i),a[i]-=i; sort(a+1,a+n+1),num=a[(n+1)>>1]; for(int i=1;i<=n;i++) ans+=(ll)abs(num-a[i]); cout<<ans<<endl; return 0; }