P5823 【L&K R-03】課表的排列 題解
本文純找規律,想要數學證明請勿進入
題目分析
首先題目重點是這句話:
如果課表上一共有 n 個科目,每個科目都有且僅有兩節課,小 L 想知道是否存在一個課表,滿足這 n 科的兩節課間隔的課程數從小到大排序後是一個公差為 1 的等差數列。
換句話說,這句話意思是:
如果給你 2n 個數,分別是 1,1,2,2,…,…,n,n 。對於任意小於等於 n 的數字 k ,將其兩次出現的位置記做 i 、j 。\(S_k\) \(=j-i+1\) 。要求找到一種排列 2n 個數的方法使得將\(S\)排序後是一個公差為 1 的等差數列。
解決題目
DFS
爆搜大家都會跟列舉全排列差不多,但是 n=100000x+1 這種資料爆搜是不行的,DFS期望得分 \(50-\)
規律?
用DFS跑 \(n=3\) 之後輸出所有結果,如果沒錯的話,應該有如下的兩個可行解:
1 2 3 1 3 2
1 2 3 2 1 3
—— 有什麼規律嗎?
—— 都是以1 2 3
開頭。
—— 還有嗎?
—— 沒了……
—— 把開頭的1 2 3
去掉,看後面的三個數!
—— 呃……1 3
總是在一起,順序也不變。
\(n=5\)
以1 2 3 4 5
開頭的可行結果:
1 2 3 4 5 1 3 5 2 4 1 2 3 4 5 1 4 2 5 3 1 2 3 4 5 2 1 5 4 3 1 2 3 4 5 2 4 1 3 5 1 2 3 4 5 3 1 4 2 5 1 2 3 4 5 3 2 1 5 4
其中有
1 2 3 4 5 1 3 5 2 4
1 2 3 4 5 2 4 1 3 5
滿足之前推出來的規律。
等等,為什麼是 \(n=5\) 而非 \(n=4\) 呢?
看題,題目中有
輸入僅一行,一個 奇數 n,表示課表上的課程數。
所以看題很重要!
規律推廣
用DFS可以跑出 \(n=7\) 與 \(n=9\) 以及 \(n=11\) 可以發現如下規律:
前 n 個數是1,2,…,n。後 n 個數可以是(小於 n 的所有偶數+小於 n 的所有奇數)或(小於 n 的所有奇數+小於 n 的所有偶數)。所有奇偶數均按從小到大排列。
分塊
分塊就是再DFS可以接受的範圍搜尋,出了這個範圍就用別的方法,例如上面的規律。
這是考場上常用的技巧,可以保證自己再拿到暴力分的基礎上可能有更高的分。
總結
數學不好不要慌,暴力規律出奇跡!