noip2005篝火晚會

2022-08-15 20:57:12 字數 792 閱讀 5298

這是一道不算太難的題,但愚蠢的我並沒有想到。

首先,判斷無解的情況:他想相鄰的不想與他相鄰。

然後,構造出合法的數列,因為第一位左邊有兩種選擇,且構造出的環不等價,所以要做兩次。

(這一點我並沒有想清楚)

然後,考慮對於構造出的數列(斷環為鏈),如何計算他與原數列的差別,即答案。

這是這道題最難的地方:如何 \(o(n)\) 的求出兩個環的不同之處。

樸素演算法:\(o(n^2)\),顯然無法接受。

因為環無論怎麼旋轉,兩個人的相對位置是不會變的,於是,可以對於每乙個位置求出的數列與原數列的差 \(x\),表示數列要旋轉 \(x\) 個位置,此位置才會與原數列重合。然後條統計出每個 \(x\) 出現的次數,\(n-max(x)\) 就是答案。

#include using namespace std;

#define db double

#define ll long long

#define rg register

inline int gi()

const db pi = acos(-1.0);

const int n = 5e4+5, inf = 1<<30;

int n,ans,f[n],s[n],pos[n],cnt[n];

bool vis[n];

inline void cal()

inline void dfs(rg int o,rg int dep)

int main()

NOIP2005 篝火晚會

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

Noip2005 篝火晚會

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

NOIP 2005 篝火晚會

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