p1008篝火晚會
accepted
標籤:組合數學
noip提高組2005
佳佳剛進高中,在軍訓的時候,由於佳佳吃苦耐勞,很快得到了教官的賞識,成為了「小教官」。在軍訓結束的那天晚上,佳佳被命令組織同學們進行篝火晚會。一共有n個同學,編號從1到n。一開始,同學們按照1,2,……,n的順序坐成一圈,而實際上每個人都有兩個最希望相鄰的同學。如何下命令調整同學的次序,形成新的乙個圈,使之符合同學們的意願,成為擺在佳佳面前的一大難題。
佳佳可向同學們下達命令,每乙個命令的形式如下:
(b1, b2,... bm -1, bm)
這裡m的值是由佳佳決定的,每次命令m的值都可以不同。這個命令的作用是移動編號是b1,b2,…… bm –1,bm的這m個同學的位置。要求b1換到b2的位置上,b2換到b3的位置上,……,要求bm換到b1的位置上。
執行每個命令都需要一些代價。我們假定如果乙個命令要移動m個人的位置,那麼這個命令的代價就是m。我們需要佳佳用最少的總代價實現同學們的意願,你能幫助佳佳嗎?
對於30%的資料,n <= 1000;
對於全部的資料,n <= 50000。
輸入的第一行是乙個整數n(3 <= n <= 50000),表示一共有n個同學。其後n行每行包括兩個不同的正整數,以乙個空格隔開,分別表示編號是1的同學最希望相鄰的兩個同學的編號,編號是2的同學最希望相鄰的兩個同學的編號,……,編號是n的同學最希望相鄰的兩個同學的編號。
輸出包括一行,這一行只包含乙個整數,為最小的總代價。如果無論怎麼調整都不能符合每個同學的願望,則輸出-1。
43 44 3
1 21 2
2
1s
noip2005 第三題
解析:現在語感有點差,寫了半天題解,寫的我自己都不知道在寫什麼,就結合上面這個鏈結的講解以及下方的**來理解吧。
**:#include#include#include#include#define maxn 50000
using namespace std;
int n,x[maxn+20][2];
int a[maxn+20],s[maxn+20];
bool used[maxn+20];
void readdata()
if(!used[k])
break;
}if(i
NOIP2005 篝火晚會
題目 分析 置換群.首先理解題意 b1,b2,bn是無限制的,並非連續,並非遞增,隨便選。於是可以形成若干個環,乙個環的花費是這個環包含的元素個數。所以,最小花費就是多少個人不在應在的位置上。再,多少個人不在應在的位置上 n 最多多少人在應在的位置上。然後,這個可以用偏移量求,求偏移量中包含元素最多...
Noip2005 篝火晚會
佳佳剛進高中,在軍訓的時候,由於佳佳吃苦耐勞,很快得到了教官的賞識,成為了 小教官 在軍訓結束的那天晚上,佳佳被命令組織同學們進行篝火晚會。一共有nnn個同學,編號從111到nnn。一開始,同學們按照1,2,n1,2,n1,2,n的順序坐成一圈,而實際上每個人都有兩個最希望相鄰的同學。如何下命令調整...
NOIP 2005 篝火晚會
額 對這組題感興趣的具體的解題報告可以戳戳這裡 問題描述 佳佳剛進高中,在軍訓的時候,由於佳佳吃苦耐勞,很快得到了教官的賞識,成為了 小教官 在軍訓結束的那天晚上,佳佳被命令組織同學們進行篝火晚會。一共有n個同學,編號從1到n。一開始,同學們按照1,2,n的順序坐成一圈,而實際上每個人都有兩個最希望...