不懂 篝火晚會

2022-03-21 06:34:26 字數 1428 閱讀 8002

【題目描述】

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

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

(b 1 , b 2 ,... b m -1 , b m )

這裡 m 的值是由佳佳決定的,每次命令 m 的值都可以不同。這個命令的作用是移動編號是 b 1 , b 2 ,…… b m –1 , b m 的這 m 個同學的位置。要求 b 1 換到 b 2 的位置上, b 2 換到 b 3 的位置上,……,要求 b m 換到 b 1 的位置上。

執行每個命令都需要一些代價。我們假定如果乙個命令要移動 m 個人的位置,那麼這個命令的代價就是 m 。我們需要佳佳用最少的總代價實現同學們的意願,你能幫助佳佳嗎?

【輸入格式】

輸入檔案 的第一行是乙個整數 n ( 3 <= n <= 50000 ),表示一共有 n 個同學。其後 n 行每行包括兩個不同的正整數,以乙個空格隔開,分別表示編號是 1 的同學最希望相鄰的兩個同學的編號,編號是 2 的同學最希望相鄰的兩個同學的編號,……,編號是 n 的同學最希望相鄰的兩個同學的編號。

【輸出格式】

輸出檔案 包括一行,這一行只包含乙個整數,為最小的總代價。如果無論怎麼調整都不能符合每個同學的願望,則輸出 -1 。

【樣例輸入】

4

3 4

4 3

1 2

1 2

【樣例輸出】

2【分析】

什麼群論之類的東西。不懂。

#include #include #define maxn 50010

int time[maxn],a[maxn],b[maxn],c[maxn];

int n,ans;

int main()

if (c[n] != b[1])

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

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

if (time[i] > ans)

ans = time[i];

memset(time,0,sizeof(time));

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

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

if (time[i] > ans)

ans = time[i];

printf("%d\n",n - ans);

return 0;

}

RQNOJ 篝火晚會

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

NOIP2005 篝火晚會

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

Noip2005 篝火晚會

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