洛谷 P1053 篝火晚會

2021-10-05 04:48:15 字數 2135 閱讀 8707

佳佳剛進高中,在軍訓的時候,由於佳佳吃苦耐勞,很快得到了教官的賞識,成為了「小教官」。在軍訓結束的那天晚上,佳佳被命令組織同學們進行篝火晚會。一共有nn

n個同學,編號從11

1到nn

n。一開始,同學們按照1,2,…,n1,2,…,n1,

2,…,

n的順序坐成一圈,而實際上每個人都有兩個最希望相鄰的同學。如何下命令調整同學的次序,形成新的乙個圈,使之符合同學們的意願,成為擺在佳佳面前的一大難題。

佳佳可向同學們下達命令,每乙個命令的形式如下:

(b1,b2,...bm−1,bm)(b_1, b_2,... b_, b_m) (b

1​,b

2​,.

..bm

−1​,

bm​)

這裡mm

m的值是由佳佳決定的,每次命令mm

m的值都可以不同。這個命令的作用是移動編號是b1,b2,…,bmb_1,b_2,…, b_mb1

​,b2

​,…,

bm​的這m個同學的位置。要求b1b_1b1

​換到b2b_2b2

​的位置上,b2b_2b2

​換到b3b_3b3

​的位置上,……,要求bmb_mbm

​換到b1b_1b1

​的位置上。執行每個命令都需要一些代價。我們假定如果乙個命令要移動mm

m個人的位置,那麼這個命令的代價就是mm

m。我們需要佳佳用最少的總代價實現同學們的意願,你能幫助佳佳嗎?

第一行是乙個整數n(3≤n≤50000)n(3 \le n \le 50000)n(

3≤n≤

5000

0),表示一共有nn

n個同學。

其後nn

n行每行包括22

2個不同的正整數,以乙個空格隔開,分別表示編號是11

1的同學最希望相鄰的兩個同學的編號,編號是22

2的同學最希望相鄰的兩個同學的編號,……,編號是nn

n的同學最希望相鄰的兩個同學的編號。

乙個整數,為最小的總代價。如果無論怎麼調整都不能符合每個同學的願望,則輸出−1-1−1

輸入 #1

4

3 44 3

1 21 2

輸出 #1

2
對於30%的資料,n≤1000n \le 1000n≤

1000

;對於全部的資料,n≤50000n \le 50000n≤

5000

0。2005提高組第三題

#include

#include

#include

#include

#define ri register int

using

namespace std;

const

int maxn =

5e4+5;

int n;

int cir[maxn]

, want[maxn][2

], a[maxn]

, b[maxn]

, vis[maxn]

;inline

intread()

while

(isdigit

(ch)

)return flag * res;

}bool

check()

elseif(

!vis[want[i][1

]])else

break;}

if(cnt == n)

return

true

;return

false;}

intcal()

for(ri i =

0; i < n; i++

)int max_same =-1

;for

(ri i =

0; i < n; i++

) max_same =

max(max_same,

max(a[i]

, b[i]))

;return n - max_same;

}int

main()

洛谷P1053 篝火晚會

題目 模擬,構造出整個數列,要求的就是這個數列需要經過多少次操作得到 但是,這其實是乙個環,編號為1的可以放任意乙個位置,每一位都可以右移一位,最右邊的一位移到第一位 後文直接叫右移 而且,第乙個人可以選擇左邊a 1 右邊b 1 也可以左邊b 1 右邊a 1 所以環還可以倒過來。比如題中所給資料 4...

P1053 篝火晚會

至於思路以及 解釋,個人覺得洛谷的題解已經很清楚了,故就不多解釋了 有一點不是很清楚,就是如果將c陣列的初始值定義為 正 c 0 1 c 1 l 1 反 c 0 1 c 1 r 1 時會wa乙個點,但在我看來好像並沒有什麼區別,如果有人知道,可以在下面告訴我,萬分感謝 include include...

洛谷P1053篝火晚會題解 zhengjun

題目描述 佳佳剛進高中,在軍訓的時候,由於佳佳吃苦耐勞,很快得到了教官的賞識,成為了 小教官 在軍訓結束的那天晚上,佳佳被命令組織同學們進行篝火晚會。一共有n nn個同學,編號從1 11到n nn。一開始,同學們按照1,2 n 1,2,n 1,2,n的順序坐成一圈,而實際上每個人都有兩個最希望相鄰的...