Login with GitHub. Nope?
修正 C++ 的程式碼在使用一定量動態記憶體後會產生 RF 的問題 @ 2019/12/6 4:45pm NeoHOJ 強勢復活中 (Open beta)
Submit  Ranklist

Problem : 21 - 大象

Problem Statistics

Solved Member: 25  Submission: 172  User Tried: 30

Statement:

在拜特蘭動物園裡,成群的大象在一起是司空見慣的事情。動物園的管理員喜歡叫員工們把動物們排成一直線,在動物園裡面遊行。

不幸的是,管理員發現大象們排的順序並不是他自己所想要的。所以,他決定重新把大象排列過。把這麼大的動物重新排列可是一件大事啊!動物園的員工們紛紛提出意見,給出大象們該要交換的順序。

由於大象實在是太大了!動物園的員工們決定把他們兩兩交換來重新排列,他們可以隨便選兩隻大象並交換他們的位置。但是,移動兩隻大象並沒有想像中的容易,事實上移動所花費的力氣和大象的重量成正比。因此,我們可以估計移動重量大象$m_1$和$m_2$的大象需要花$m_1+m_2$的力氣。究竟把大象移到管理員所要的排列需要花多少力氣呢?

Task:

從輸入讀取動物園大象的排列和重量,並將他們排到管理員所想要的位置,輸出最小所需要花的力氣。

Input:Output:

輸入的第1行有1個整數n ($2 \leq n \leq 1000000$)代表動物園有多少隻大象,我們假設他們的編號是1到n。第2行的正整數$m_i (100 \leq m_i \leq 6500)$ and $1 \leq i \leq n$,以空格間隔開來,代表編號為i的大象重量(單位是公斤)。

第3行有n個整數$a_i (1 \leq a_i \leq n)$,由空格區隔開來,代表大象的編號,為最初的順序。第4行也一樣有n個整數$b_i (1 \leq b_i \leq n)$,由空格區隔開來,代表管理員想要的排列順序。你可以假設$a_i$和$b_i$一定不一樣。
輸出只有一行,請你輸出最少需要花多少的力氣才能達到管理員所要求的排列。

Sample Input:Sample Output:

6
2400 2000 1200 2400 1600 4000
1 4 5 3 6 2
5 3 2 4 6 1
11200

Source:

POI 16 Stage 1

Problem Setter

Testdata:

TestTimeMemoryScore
01000ms65536kb
1-ocen1000ms65536kb
11000ms65536kb10
2-ocen1000ms65536kb
21000ms65536kb10
3-ocen1000ms65536kb
31000ms65536kb10
4-ocen5000ms65536kb
41000ms65536kb10
51000ms65536kb10
66000ms65536kb10
76000ms65536kb10
8-16000ms65536kb10
8-26000ms65536kb
9-16000ms65536kb10
9-26000ms65536kb
10-16000ms65536kb10
10-26000ms65536kb