佳佳剛進高中,在軍訓的時候,由於佳佳吃苦耐勞,很快得到了教官的賞識,成為了「小教官」。在軍訓結束的那天晚上,佳佳被命令組織同學們進行篝火晚會。一共有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輸出 #13 44 3
1 21 2
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的順序坐成一圈,而實際上每個人都有兩個最希望相鄰的...