1. 程式人生 > >51Nod - 1574 排列轉換

51Nod - 1574 排列轉換

gif out for sam close pen sub splay 分享圖片

現在有兩個長度為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

51Nod - 1574 排列轉換