Noip模擬1 2018/10/17
T1: 序列(seq)
給定 N,A,B 構造一個長度為 N 的排列,使得:
排列長度為 N;
最長上升子序列長度為 A;
最長下降子序列長度為 B。
我們有 SPJ,有解任意給出一組,否則說明無解。
感覺挺好想的,只是有解的情況沒輸出“Yes”,心態爆炸
先考慮N=A*B的情況
那麼我們可以構造一個排列,有B個長度為A的上升子序列,滿足每個子序列遞減
在這麼構造的情況下,若
,則無解
若構造不滿,先做k1個長度為A的上升子序列,最後有k2個點遞減,多出來的添在
上
時間效率
T2:購物(sum)
visit_world 有一個商店,商店裡賣 N 個商品,第 i 個的價格為 a[i]我們稱一個正整數 K 是美妙的,當且僅當我們可以在商店裡選購若干個商品,使得價格之和落在區間 [K,2K] 中。
問:有多少個美妙的數。
orzJyc,辣雞Hz誤導
假設我們已經處理到
(
,滿足a[i]單調遞增),考慮a[i]的貢獻。
有貢獻的為
,假如
,那麼將
接在
後面和之前不會有間隙,反之則說明從
到
之間永遠都取不到,取不到的部分記為p
那麼答案就成了
時間效率
T3:計數(count)
考慮一個 N 個節點的二叉樹,它的節點被標上了 1∼N 的編號. 並且,編號為 i 的節點在二叉樹的前序遍歷中恰好是第 i 個出現.
我們定義 Ai 表示編號為 i 的點在二叉樹的中序遍歷中出現的位置.
現在,給出 M 個限制條件,第 i 個限制條件給出了
,表示
,也即中序遍歷中 ui 在 vi 之前出現.
你需要計算有多少種不同的帶標號二叉樹滿足上述全部限制條件,答案對
取模.
此題20%卡特蘭數白送。
考慮dp
表示以
為頭
為結尾的子樹可能的情況
列舉一個
,將
分為兩個子樹,左子樹
,右子樹
,且左右子樹均滿足條件,
這樣子判斷效率為
,考慮優化判斷過程
將條件
對映到一個二維矩陣上,然後判斷
上有沒有不滿足的條件,矩陣字首和一下就好
時間效率