NYOJ 59 小明組織活動的任務(置換)

2021-08-06 05:08:26 字數 1948 閱讀 6786

時間限制:

2000 ms  |  記憶體限制:

65535 kb

難度:6 描述

小明剛進高中,在軍訓的時候,由於小明吃苦耐勞,很快得到了教官的賞識,成為了「小教官」。在軍訓結束的那天晚上,小明被命令組織同學們進行篝火晚會。一共有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。我們需要小明用最少的總代價實現同學們的意願,聰明的小明也有犯傻的時候,你能幫助小明嗎?

n <= 50000。

輸入第一行輸入n(0輸出

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

樣例輸入

1

43 4

4 31 2

1 2

樣例輸出

2

** noip2005

問題可以轉化為最少有多少個同學不在該在的位置上。

首先要知道當乙個人在合法位置上時,呢從頭到尾都不會再移動他,否則必不能組成目標序列,其次就是n個同學坐成乙個環,故需要注意的是並不是當前位置和目標位置的差值為0才是合法位置,你可以隨意從乙個起點開始編號,這道題的思路其實很明顯了,開乙個c陣列構建合法序列,並判定最終不能組成目標序列的條件,這裡其實不難,隨便找乙個點作為起點作為c[1],然後找令他的乙個鄰居作為c[2],開始往後遍歷,c陣列存的下乙個同學的編號一定是當前位置編號為c[i]同學的最終鄰居,若都不是,則肯定不能構成目標序列,還有一種情況是有的同學根本沒在目標序列出現,故肯定不能構成目標序列,剩下的就是記錄所有同學最終位置和初始位置的差值,然後找到某一差值出現的次數最多的,則答案就是n-mx,因為是乙個環,故要考慮反轉的情況。。。

詳解ppt:

#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

#define inf 1000000000

#define mod 1000000007

#define maxn 51005

#define lowbit(x) (x&-x)

#define eps 1e-10

int a[maxn],b[maxn],c[maxn],t1[maxn],t2[maxn];

bool vis[maxn];

int main(void)

{ int t,i,ans,n;

scanf("%d",&t);

while(t--)

{ ans=0;bool flag=0;

memset(t1,0,sizeof(t1));

memset(t2,0,sizeof(t2));

memset(vis,0,sizeof(vis));

scanf("%d",&n);

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

scanf("%d%d",&a[i],&b[i]);

c[1]=1;c[2]=a[1];

vis[c[1]]=vis[c[2]]=1;

for(i=2;i

NYOJ 開心的小明

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 小明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n 元錢就行 今天一早小明就開始做預算,但是他想買的東西太...

Nyoj 開心的小明49

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 小明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n 元錢就行 今天一早小明就開始做預算,但是他想買的東西太...

NYOJ小明的調查作業

小明的調查作業 時間限制 1000 ms 記憶體限制 65535 kb 難度 1 描述 小明的老師布置了乙份調查作業,小明想在學校中請一些同學一起做一項問卷調查,聰明的小明為了實驗的客觀性,想利用自己的計算機知識幫助自己。他先用計算機生成了n個1到1000之間的隨機整數 0 輸入 輸入有2行,第1行...