1. 程式人生 > 其它 >做題記錄2021.12.13

做題記錄2021.12.13

CF985E Pencils and Boxes

題目大意

給定 n 個整數 a1 ... an,求是否存在一種分組方案,滿足:

  • 每個整數必須恰好分入一組

  • 每一組至少包含 k 個整數

  • 每一組中最大值與最小值之差 <= d

    輸出“YES”或“NO”

思路

首先看到最大值與最小值之差分組,果斷排序

然後想到一點貪心的想法,把能分且數量夠的先分,不夠的另外處理

再用 \(dp\) 來處理,用一個數組 \(f_i\) 記錄到第 \(i\) 個數是否可行

具體來說,用一個指標 \(pos\) 定位最後可行的位置,每次找到一個 \(f_i\) 可行,不斷移動指標 \(pos\)

, 使得下輪迴圈中 \(i\) 的位置和 \(pos\) 位置差小於等於 \(d\) ,最後根據 \(f_n\) 的值輸出 \(YES\)\(NO\)(雙指標?)

程式碼

CF985F Isomorphic Strings

題目大意

定義兩個字串S1,S2匹配當且僅當有一種對映f使得f(S1i)=S2i

給出一個字串S,Q組詢問,每組詢問S[x...x+len-1]與S[y...y+len-1]是否匹配

思路

看完後一頭霧水……(暴力?TLE

轉化一下題意:

對於每一個字元x的對映字元y,只要滿足當x出現的地方y也出現,x不出現的地方y也不出現時(若f(x)=y,則當且僅當S1i=x時,S2i=y),匹配成立

相當於當x的出現情況=y的出現情況

因為題目要求對映相同,而不關心具體字元相同,因此如果兩個字串中每個字母出現情況的集合等價,那麼匹配成立

於是乎,就不需要 \(O(26^2)\) 的枚舉了!直接搞兩個 \(multiset\),把26個雜湊值扔進去,判相同就行了。

程式碼