51nod 1574 排列轉換 貪心 鴿巢原理

2021-08-10 03:59:35 字數 626 閱讀 8735

題意:有兩個長度為n的排列p和s。要求通過交換使得p變成s。交換 pi 和 pj 的代價是|i-j|。要求使用最少的代價讓p變成s。

考慮兩個數字pi和pj,假如交換他們能使得pi到目標的距離減少,pj到目標的距離減少。那麼應該交換他們,這是乙個必要的操作,也是答案的下界。

如果每一次都能找到這樣的兩個數字,那麼答案就是排列p中的每個數字在排列s的位置的距離差之和/2.這顯然是答案的下界。

現在考慮證明這個下界是可以構造出來的。

考慮排列p中最後乙個位置不對的數字,不妨設為pj,他的目標位置是pi,那麼如果p[i+1,j]中有任意乙個數的目標是pk(k

#include

using

namespace

std;

const

int maxn = 2e5+5;

typedef

long

long ll;

int pos[maxn];

int main()

ll ans = 0;

for(int i = 1;i <= n;++i)

printf("%lld\n",ans/2);

}return

0;}

51nod 1574 排列轉換

現在有兩個長度為n的排列p和s。要求通過交換使得p變成s。交換 pi 和 pj 的代價是 i j 要求使用最少的代價讓p變成s。單組測試資料。第一行有乙個整數n 1 n 200000 表示排列的長度。第二行有n個範圍是1到n的整數,表示排列p。每個整數只出現一次。第三行有n個範圍是1到n的整數,表示...

51Nod 1574 排列轉換

現在有兩個長度為n的排列p和s。要求通過交換使得p變成s。交換 p i pi pi 和 p j pj pj 的代價是 i j 要求使用最少的代價讓p變成s。input單組測試資料。第一行有乙個整數n 1 n 200000 表示排列的長度。第二行有n個範圍是1到n的整數,表示排列p。每個整數只出現一次...

51 nod 1574 排列轉換 思維 貪心

1574 排列轉換 codeforces 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 現在有兩個長度為n的排列p和s。要求通過交換使得p變成s。交換 pi 和 pj 的代價是 i j 要求使用最少的代價讓p變成s。input 單組測試資料。第一行有乙個整數n ...