求出每一位,移到正确位置,所需的代价和。由于是交换,代价和除以2。
要用long long
#include<bits/stdc++.h>
using namespace std;
const int MAXN=200200;
long long pos[MAXN];
int main()
{
long long n,i,ans,x;
while(~scanf("%lld",&n))
{
ans=0;
for(i=1;i<=n;i++)
{
scanf("%lld",&x);
pos[x]=i;
}
for(i=1;i<=n;i++)
{
scanf("%lld",&x);
ans+=abs(i-pos[x]);
}
printf("%lld\n",ans>>1);
}
}
本文介绍了一种通过读取输入数组并计算将其排序所需交换代价的方法。程序使用C++实现,通过记录每个元素的原始位置来计算总代价,并将最终结果除以2以得到实际所需的最小交换次数。

被折叠的 条评论
为什么被折叠?



