A. 數字
dp套dp經典題?
考慮枚舉一個$x \&y$的值,如何檢驗這個值是否可能被拼出來。
那麼簡單的想法就是暴力dp,只要表示出與邊界的大小關係就可以轉移。
那麼考慮同一位上dp只有16種不同的狀態,給這16種狀態的dp值壓在一起就可以得到數的數量。
複雜度看起來很高,但是跑不滿。
B. 跳蚤
發現值域很小,然後就開始想一些奇怪的東西了。
考慮對於$t$較大的點,如果暴力維護,那麼每個點最多跳根號次就無法再造成貢獻。
對於較小的點,由於種類不會很多,所以可以對於每個開數據結構暴力維護。
自然的想法是維護線段樹或者樹狀數組,然後發現log在根號外面了,目測會tle(實測沒事)。
然後發現較大的修改次數多,查詢次數少,所以分塊維護,然後調塊長可以做到log在根號裏面。
然後發現較小的實際上也可以,查詢次數多,修改次數少,那麼同樣可以分塊維護。
這樣就做到了不帶log的複雜度(實測最慢)。
C. 棋盤
一個顯然的想法是狀壓dp,然後發現複雜度死了。
然後考慮用生成函數來優化。
那麼只要求出來整個dp數組的生成函數即可,考慮代入點值然後插值出係數求解。
自然的想法就是代入單位根,然後IDFT求出係數。
然後只要求出來點值即可,發現點值的轉移式可以用矩陣來優化。
然後就沒了。