51Nod

现在有两个长度为n的排列p和s。要求通过交换使得p变成s。交换 pipi 和 pjpj 的代价是|i-j|。要求使用最少的代价让p变成s。


Input单组测试数据。 
第一行有一个整数n (1≤n≤200000),表示排列的长度。 
第二行有n个范围是1到n的整数,表示排列p。每个整数只出现一次。 
第三行有n个范围是1到n的整数,表示排列s。每个整数只出现一次。Output输出一个整数,表示从排列p变到s最少要多少代价。Sample Input

样例输入1
4
4 2 1 3
3 2 4 1

Sample Output

样例输出1
3
 1 #include <iostream>
 2 using namespace std;
 3 #include<string.h>
 4 #include<set>
 5 #include<stdio.h>
 6 #include<math.h>
 7 #include<queue>
 8 #include<map>
 9 #include<algorithm>
10 #include<cstdio>
11 #include<cmath>
12 #include<cstring>
13 #include <cstdio>
14 #include <cstdlib>
15 int  a[210000];
16 int  b[210000];
17 int main()
18 {
19     int t;
20     cin>>t;
21     for(int i=1;i<=t;i++)
22     {
23         int x;
24         cin>>x;
25         a[x]=i;
26     }
27     long long sum=0;
28     for(int i=1;i<=t;i++)
29     {
30         int y;
31         cin>>y;
32         sum+=fabs(a[y]-i);
33     }
34     cout<<sum/2;
35     return 0;
36 }
View Code
原文地址:https://www.cnblogs.com/dulute/p/7966718.html