Noip2005 篝火晚會

2022-02-06 01:32:52 字數 2459 閱讀 9080

佳佳剛進高中,在軍訓的時候,由於佳佳吃苦耐勞,很快得到了教官的賞識,成為了「小教官」。在軍訓結束的那天晚上,佳佳被命令組織同學們進行篝火晚會。一共有nnn個同學,編號從111到nnn。一開始,同學們按照1,2,…,n1,2,…,n1,2,…,n的順序坐成一圈,而實際上每個人都有兩個最希望相鄰的同學。如何下命令調整同學的次序,形成新的乙個圈,使之符合同學們的意願,成為擺在佳佳面前的一大難題。

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

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

這裡mmm的值是由佳佳決定的,每次命令mmm的值都可以不同。這個命令的作用是移動編號是b1,b2,…,bmb_1,b_2,…, b_mb1​,b2​,…,bm​的這m個同學的位置。要求b1b_1b1​換到b2b_2b2​的位置上,b2b_2b2​換到b3b_3b3​的位置上,……,要求bmb_mbm​換到b1b_1b1​的位置上。執行每個命令都需要一些代價。我們假定如果乙個命令要移動mmm個人的位置,那麼這個命令的代價就是mmm。我們需要佳佳用最少的總代價實現同學們的意願,你能幫助佳佳嗎?

輸入格式:

第一行是乙個整數n(3≤n≤50000)n(3 \le n \le 50000)n(3≤n≤50000),表示一共有nnn個同學。

其後nnn行每行包括222個不同的正整數,以乙個空格隔開,分別表示編號是111的同學最希望相鄰的兩個同學的編號,編號是222的同學最希望相鄰的兩個同學的編號,……,編號是nnn的同學最希望相鄰的兩個同學的編號。

輸出格式:

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

輸入樣例#1:複製

4

3 44 3

1 21 2

輸出樣例#1:複製

2

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

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

2005提高組第三題

又被noip題吊打了。

可以看出最小代價等於不在應該在的位置上的數的個數的最小值。

於是我們可以列舉開始位置,還有兩個方向,列舉結束時的目標環,求出不在應該在的位置上的數的最小個數就是答案。

但是這樣是$\large o(n^2)$的會t,所以找規律。

我們固定起始序列,任取乙個目標序列,求出每乙個位置到它應該到的位置的步數,發現,不管目標序列是什麼樣子,相同的就一直相同,不同的就一直不同。

所以我們把答案變成n-最多的不用動的數量。

然後發現其實距離應到的位置距離相同的最大的數量, 就是最多不用動的數量。

所以這樣就可以$\large o(n)$求出。

記得正反都跑一遍。

#include #include 

#include

using

namespace

std;

#define reg register inline

intread()

#define n 50005

intn;

int deg[n], ch[n][2

];int

l[n], r[n];

int cnt[2

][n];

inta[n];

intmain()

for (reg int i = 1 ; i <= n ; i ++) if (deg[i] != 2) return puts("

-1"), 0

;

int p = 1, num = 0

; l[

1] = ch[1][0], r[1] = ch[1][1

];

dowhile(p != 1

);

if (num != n) return puts("

-1"), 0

; p = 1

;

for (reg int i = 1 ; i <= n ; i ++, p =r[p])

cnt[

0][(i-p+n)%n]++;

p = 1

;

for (reg int i = 1 ; i <= n ; i ++, p =l[p])

cnt[

1][(i-p+n)%n]++;

int ans = 0

;

for (reg int i = 0 ; i < n ; i ++)

ans = max(ans, max(cnt[0][i], cnt[1

][i]));

printf(

"%d\n

", n -ans);

return0;

}

NOIP2005 篝火晚會

題目 分析 置換群.首先理解題意 b1,b2,bn是無限制的,並非連續,並非遞增,隨便選。於是可以形成若干個環,乙個環的花費是這個環包含的元素個數。所以,最小花費就是多少個人不在應在的位置上。再,多少個人不在應在的位置上 n 最多多少人在應在的位置上。然後,這個可以用偏移量求,求偏移量中包含元素最多...

NOIP 2005 篝火晚會

額 對這組題感興趣的具體的解題報告可以戳戳這裡 問題描述 佳佳剛進高中,在軍訓的時候,由於佳佳吃苦耐勞,很快得到了教官的賞識,成為了 小教官 在軍訓結束的那天晚上,佳佳被命令組織同學們進行篝火晚會。一共有n個同學,編號從1到n。一開始,同學們按照1,2,n的順序坐成一圈,而實際上每個人都有兩個最希望...

NOIp2005 篝火晚會

luogu1053 首先要發現乙個事實 對於每個不再正確位置上的人,我們都要花費1的代價來讓他正確 然而我沒有發現 todo 證明這個事實。然後就可以轉化問題為 最多有多少個人不用動。那麼那些人不用動呢?就是那些與目標位置距離相等的人的集合,即斷環為鏈之後,不用右移就在目標位置的人 右移一次到達目標...