省選模擬80

A. 數字

  dp套dp經典題?

  考慮枚舉一個$x \&y$的值,如何檢驗這個值是否可能被拼出來。

  那麼簡單的想法就是暴力dp,只要表示出與邊界的大小關係就可以轉移。

  那麼考慮同一位上dp只有16種不同的狀態,給這16種狀態的dp值壓在一起就可以得到數的數量。

  複雜度看起來很高,但是跑不滿。

 

B. 跳蚤

  發現值域很小,然後就開始想一些奇怪的東西了。

  考慮對於$t$較大的點,如果暴力維護,那麼每個點最多跳根號次就無法再造成貢獻。

  對於較小的點,由於種類不會很多,所以可以對於每個開數據結構暴力維護。

  自然的想法是維護線段樹或者樹狀數組,然後發現log在根號外面了,目測會tle(實測沒事)。

  然後發現較大的修改次數多,查詢次數少,所以分塊維護,然後調塊長可以做到log在根號裏面。

  然後發現較小的實際上也可以,查詢次數多,修改次數少,那麼同樣可以分塊維護。

  這樣就做到了不帶log的複雜度(實測最慢)。

 

C. 棋盤

  一個顯然的想法是狀壓dp,然後發現複雜度死了。

  然後考慮用生成函數來優化。

  那麼只要求出來整個dp數組的生成函數即可,考慮代入點值然後插值出係數求解。

  自然的想法就是代入單位根,然後IDFT求出係數。

  然後只要求出來點值即可,發現點值的轉移式可以用矩陣來優化。

  然後就沒了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章