题目
思路:统计把每个盘子转到对应的人需要的操作次数存在数组 t
答案即为∑i=0n−1∣i−t[i]∣
代码WA,求调
或者帮忙指出思路有问题
求求力。
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
long long n,w[N],t[N],ans,z,a[N];
int main(){
cin>>n;
for(int i=0;i<n;++i){
cin>>w[i];
a[w[i]]=i;
}
for(int i=0;i<n;++i){
t[i]=(i-a[i]+n)%n;
}
sort(t,t+n);
z=t[n/2-1];
if(n%2==1) z=t[n/2];
for(int i=0;i<n;++i){
ans+=abs(z-t[i]);
}
cout<<ans;
return 0;
}