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...