【題解】CF2047

yeyou26發表於2024-12-04

A

  • 顯然每次完整地放完都是一個正方形,正方形的邊長每次 +2,初始值為 1
  • 所以只需要 check 每天的塊數是否是奇數的平方,然後再做字首和即可

B

  • 顯然字母出現順序不重要而出現次數重要,直接放桶並不考慮出現次數為 0 的數
  • 考慮多重集意義下的排列,設序列總長度為 \(n\),第 \(i\) 鍾數出現的次數為 \(k_{i}\),顯然排列數為 \(\frac{{n!}}{\Pi_{i=1}^m{k_{i}!}}\)
  • 顯然剪掉的數越小越好,改成的數越大越好,所以找把出現次數最少的數改成出現次數最多的數即可
  • 如果所有數出現次數全相同,則要保證剪掉和改成的數不同

C

  • 注意到相當於 \(n\) 個二元組,其中一個取兩個數,剩下的都取一個數,求最值
  • 直接先全取大值,再取小值裡取最大的即可
  • 這題怎麼能在 C 的

D

  • 注意到:如果一個數後面有比自己小的數,那它一定後移
  • 注意到:一直迴圈上述過程,那最後的序列一定單調不降
  • 注意到:一定有一個極長的答案序列的字首滿足:是原序列的子序列,單調不降
  • 所以我們可以隨意控制那些不在這個序列裡的數跑到後面去的順序,也就是說,我們可以讓不在這個序列裡的那些數在答案序列後部仍然單調不降
  • 顯然只需判斷:哪些數後面有比自己小的數
  • 處理出字尾最小值,如果一個數大於字尾最小值,那它後移
  • 讓一個數後移的值還可以來自於這個數之前的被後移的數,所以另用一個變數存被後移的數的最小值即可

E

  • 顯然二分答案

  • 考慮列舉縱座標

  • image

  • 考慮左上角區間:令左上區間合法的橫座標一定是一個字尾,左下角區間同理

  • 注意到:如果從上到下列舉 \(y\),那 \(x_{1},x_{2}\) 都有單調性,均攤 \(O(n)\)

  • 如果左邊兩個區間已經滿足約束,考慮右邊的區間,顯然分割點越靠左越好,所以取 \(x_{1},x_{2}\) 中右邊的作為分界點,check右邊兩個區域合法性即可

  • 實現:開兩個樹狀陣列分別維護上下兩半每個縱座標位置上的點數即可

  • 總時間複雜度 二分+bit+列舉 = \((n\log ^2n)\)

F

  • 網路流不會