2024.8.21 總結(集訓 考試)

huangkxQwQ發表於2024-08-21

上午感覺不錯,下午改不出題,晚上破防。

簡略思路:

T1

本質應該是 DP 維護一次函式。

不會正解。晚上看了好久、好多篇題解還是不會。有點靜不下心來看比較長的題解。

放點別人的題解,有空再來研究:

https://www.cnblogs.com/flywatre/p/17236732.html

https://blog.51cto.com/u_15300835/3064939

https://www.cnblogs.com/C202044zxy/p/15082636.html

https://www.luogu.com.cn/article/u2zqliav

T2

\(2 \times n\) 很特殊,發現結論,即一直往右走,撞到障礙就往上下走,然後接著往右走,這樣貪心應該是對的。

然後有各種做法:

  • yzj 學長的線性做法:考慮把障礙分段。首位兩段可能不連續,預處理後直接走。中間段時連續的,直接統計。好像有些特判。

  • 另一位學長的倍增做法(好像還有一位學長也用的倍增):按步數倍增。最後要看是不是在同一行,答案可能要加 1。我不清楚細節怎麼寫,另有 jsh 所言要特判三種情況:u、v 重合;u、v 在同一列;u、v 不連通(是不是這三種我忘了,這三種是我憑回憶和自己的想法寫的,可能不對,可能不是 jsh 所說的)(實際上她說的是不是三種我都不太確定,應該是吧)(在某些方面記憶力不好加上一天接觸的資訊不少是這樣的 \kel)。

  • 題解的線段樹做法:都是用 DS 來維護,考慮維護的段的四個端點間的最短路([四條,同一列的之間不維護](?))。另一位學長有一個比較像的分塊做法,聽說它們本質是相同的。

然後我還一種都沒寫。

T3

揹包:

  1. DP。
  2. 生成函式。(我當時想的是拉格朗日插值,然後發現好像不行,因為最後的[“多項式”](??)次數太高了)
  3. 暴力狀壓列舉。

\(n=20\) 直接狀壓列舉,\(n=40\) 就想到折半狀壓。

先想的是動態開點線段樹。然後要寫的時候發現直接陣列存,upper_bound 二分即可。

T4

看到出現次數什麼的想到 xor hashing。


題解的思路:

每種顏色都出現奇數次不好處理。考慮轉換成每種都出現偶數次,這樣 xor 起來為 0 就滿足限制了。轉換的方式是把每種顏色都刪掉一次在詢問區間中的出現。

怎麼刪?把每個顏色區間(輸入給的區間)的左端點都不考慮,相當於把左端點右移一位;然後再把每個詢問區間(我們想判斷它是否符合限制的區間)的左端點右移一位。發現這樣應該是可行的。感覺這是個很妙的轉化。

然後算字首 xor 和,用個 unordered_map 來輔助統計。[unordered_map 應該不會被卡,因為 hash 值是隨機的。](??)

另外要注意減去一種顏色也沒有的情況的貢獻。這是特殊的。


我的思路:

對於一個詢問區間,統計兩個東西:

  1. 其中每 顏色的 hash 值的 xor 和。
  2. 其中每 顏色所屬種類的 hash 值的 xor 和。(這樣描述不太清楚,其實就是 1 是每種顏色只統計一次,2 是每種顏色出現了多少次就統計多少次)

當這兩個東西相等的時候這個區間就可行(此時先不管什麼顏色都沒有的區間,即先認為這種區間也是可行的)。那麼這兩個東西 xor 起來等於 \(0\) 就說明這個區間可行。

於是用[掃描線](???)。列舉詢問區間右端點,查可行區間的長度之和。用 01-Trie 維護。

但是相比正解(指題解做法)不太好寫。我今天考場上寫掛了。


2024.8.21

相關文章