1. 程式人生 > >codeforces 1093 題解

codeforces 1093 題解

A 題:

題目保證一定有解,就可以考慮用 $ 2 $ 和 $ 3 $ 來湊出這個數 $ n $

如果 $ n $ 是偶數,我們用 $ n / 2 $ 個 $ 2 $ 來湊出 $ n $ 即可

如果 $ n $ 是奇數,就用 $ n / 2 - 1 $ 個 $ 2 $ 和 $ 1 $ 個 $ 3 $ 湊出 $ n $ 即可

所以只需輸出 $ n / 2 $

B 題:

如果一個字串重排後一定是迴文串,說明這個字串只有 $ 1 $ 種字元

如果有兩種不同字元,就可以把一個放在開頭,一個放在結尾,這樣形成的一定不是迴文串

一個簡單一點的寫法是 $ sort $ 一下這個字串,判斷迴文

C 題:

貪心的想,我們如果要使整個序列非降,那麼前面的數字要儘量小,後面的數字要儘量大

首先 $ a[1] = 0,a[n] = b[1] $,然後貪心的掃過去,在滿足條件的情況下使得前面的數字儘量小,後面的數字儘量大即可

D 題:

發現每條邊的兩個端點的數字的奇偶性一定不同

所以我們我們只要做一次 $ bfs $ 染色並判斷是否能完成染色即可

假設黑點有 $ a $ 個,白點有 $ b $ 個

如果黑點是奇數,方案數是 $ 2^a $ 種,如果白點是奇數,方案數是 $ 2^b $ 種,總方案數是 $ 2^a + 2^b $ 種

然後發現整個圖不一定聯通

所以我們對每個聯通塊做一次 $ bfs $ 染色,然後把答案相乘即可

注意不能用 memset,不然 $ T $ 組資料每次 memset 一次肯定涼

E 題:

用 $ pa[i] $ 表示 $ i $ 這個數在第一個排列中出現的位置,$ pb[i] $ 表示 $ i $ 這個數在第二個排列中出現的位置

假設查詢區間為 $ l1,r1,l2,r2 $

如果 $ i $ 這個點對答案造成了貢獻,那麼 $ l1 \le pa[i] \le r1 $ && $ l2 \le pb[i] \le r2 $