P3200 HNOI2009 有趣的數列

2022-09-04 16:54:10 字數 718 閱讀 9139

p3200 [hnoi2009]有趣的數列

樣例輸入:3 10

樣例輸出:5

看樣例猜做法

大概猜一猜 觀察到答案是卡特蘭數列

接下來我們看看為什麼是這樣。

首先化簡題目

對於乙個 \(2*n\) 的排列,我們要求:

奇數字置上的數遞增

偶數字置上的數遞增

奇偶相鄰位置數遞增

奇怪的tip:偶奇相鄰不用遞增

首先假設我們把這 \(2n\) 個數乙個個填進去 填到第 \(i\) 個

如果我們要填在偶數字 那麼這個數必須比當前偶數大 也必須比上一位的奇數大

也就是說 這個數如果在偶數字上 需要比前 \(i-1\) 個數字都大

得出的結論是 如果這一位是偶數字 下標為 \(i\) 時的數字至少為 \(i\)

那麼在奇數字上呢?

我們發現只要比前幾個奇數大就可以了

也就是說 我們當前這個數一定可以填在第乙個空白的奇數字上

所以題目變成了 對於長度為 \(2n\) 的序列

對於當前數 我們要麼把他放在最大的偶數字上 要麼把他放在最大的奇數字上

還要求奇數字的數字個數時刻大於等於偶數字

因為如果奇數字少乙個 即偶數字多乙個 無論下乙個數往哪填 偶數字都沒法大於當前的數

所以問題轉化成了卡特蘭數列

P3200 HNOI2009 有趣的數列

我們稱乙個長度為2n的數列是有趣的,當且僅當該數列滿足以下三個條件 1 它是從1到2n共2n個整數的乙個排列 2 所有的奇數項滿足a1 3 任意相鄰的兩項a2i 1與a2i 1 i n 滿足奇數項小於偶數項,即 a2i 1 現在的任務是 對於給定的n,請求出有多少個不同的長度為2n的有趣的數列。因為...

HNOI2009 有趣的數列

求 1 到 2n 的全排列種類數,滿足奇數項和偶數項分別單增,任意 a a 以下為亂搞。考慮從1開始考慮每個數字怎麼填,可以看 猜 出,由於相鄰偶數項比奇數項大,所以奇數項一定要小一些,所以奇數項填的數字個數一定始終大於等於偶數項,這就是個卡特蘭數啦 問題變成求 catlan n p 由於 p 不是...

1485 HNOI2009 有趣的數列

題目鏈結 題目大意 稱乙個長度為2n 的數列是有趣的,當且僅當該數列滿足以下三個條件 它是乙個1 2n的排列a1 n 1,a2 n a2 i 1i 題解 丟題解跑qaq 我的收穫 2333 include using namespace std define maxn 3000005 int n,p...