「NOI2020」不知道咋記


本來啥也不想寫的。我能寫點啥?

寫我 D1T2 因為線段樹上傳標記時沒取模白給 76 分送走金牌?

寫我 D2T2 想到正解然后寫假了白給 44 分送走翻盤機會?

金牌線 340+,預計得分 224 + 215 = 439,實際得分 148 + 171 = 319。

啥也別說了,希望 noi 早日改賽制。

本來想寫什么 “只要不掛分我也是金牌水平”,不過想想發現大家不掛分其實都是金牌水平,所以這只能說明自己菜。


(p.s.:以上是倒序)

進寢室直接雷擊:發現和 jly 一個寢室。

然而我交際水平太差了,所以也沒搭上幾句話。倒是看到很多人來膜 jly 來着。

突然發現寢室三個人就我沒拿金,還各種丟人。


然后是試機 + 筆試日。

筆試看了一遍感覺沒啥問題就去看試機題了,試機題有交互,於是今年也會考交互?結果是煙霧彈,今年 6 道傳統題。

出成績了,誒 100 分,那挺好,繼續看試機題。看到編譯選項 -std=c++11 -O2,全場起立鼓掌.jpg。

本來想寫 robot 練練手,結果一不小心就 rm 了所有樣例,退役感++。

然后轉頭寫 sequence,發現不會了,退役感++。


然后就是喜聞樂見的 day 1。

這 t1 好不可做啊,誒怎么它 w ≤ 5,誒那不是矩陣乘法就完事兒了嗎。

這 t2 好不可做啊,我先來個容斥。誒問題好像沒有變簡單,算了,先跳。

這 t3 好不可做啊,誒這 t3 是不是嚴格強於區間逆序對啊,算了,先跳。

然后滾回去寫 t1,原本想相信一波 O2 魔法直接硬上矩陣乘法,發現不太科學。

想了一下,我是不是在 noi online 做過一道用向量乘矩陣優化復雜度的題?雖然我當時是用 bitset 莽過去的。

於是改了改發現科學了很多,回去看 t2。

感覺 t2 雖然很容斥,但是其實不管容不容斥,問題的本質都不會變簡單。

於是列了一個不容斥的 dp,大概是記 \(dp_{x,i}\) 表示結點 x 往上第一條選中的邊深度為 i 的方案數。

誒這個 dp 轉移好像是對應位置相乘,那差分后線段樹合並就 OK 了?

然后就寫了個線段樹合並,發現能過樣例(竟然能過樣例,樣例是不是根本不用取模),於是就放着不管了。

然后想了想 T3 發現我還是不會,但是暴力拼盤分好高,於是就開始寫暴力。

結果 A 類部分分(區間逆序對)debug 半天不知道錯哪兒了,只寫了個 \(O(n^2)\) 的 24 分暴力,然后就調到考試結束。


下午查分,打開看到一個 24 分以為是我 T3 的分,冷靜仔細觀察分析了一下發現我 T2 也是 24 分。

當時心態就崩了。

debug 過后發現了那個沒取模的地方,就 10+ byte,白給 76 分。

之后在寢室自閉了一下午 + 一晚上,后來教練拉我出去才勉強能夠思考一些事情。

已經發生的既定事實無法改變。

不管怎么拒絕它的發生,不管怎么逃避它的存在,已經發生的既定事實依然無法改變。

我們所能做到的,只有在這事實基礎上努力,向着另一條路,向着即使並非之前所期望的路前行。

考 day 2 的時候還是想認真考,至少要證明自己的實力,反正我也不相信自己拿不到銀牌。


然后就是喜聞樂見的 day 2。

這 t1 好不可做,會是網絡流或者圖論建模相關嗎。

這 t2。。。這 tm 題面這么長,感覺就像是什么人類智慧題。

這 t3。。。這 tm 不是弦圖嗎?noi 咋還給整出個弦圖了嗎?哦,兼職 ctsc 啊,那沒事了。

感覺還是 t1 簡單些,先看看 t1 好了。

分析了一下發現如果在一道菜用的兩種原材料之間建邊,可以通過調整使得最優解不包含環。

那當 \(m = n - 1\) 時最優解一定是樹,一看發現有這個部分分,感覺這個思路就很對。

猜了幾種建樹方法,發現每次連最大和最小好像很對。然后如果 \(m > n - 1\) 就反復把最大的拿去單獨成菜。

如果 \(m = n - 2\) 就是個背包。算了一下如果用 bitset + 輸出方案有點危?

由於 MLE 可能沒分,於是決定隨機化排列 + 開小點(結果獲得了 95 分的好成績)。

然后看了看 t2 和 t3,發現我弦圖知識儲備為 0,於是決定開 t2。

想了想什么時候輸出 No,大概是存在一條趨於無窮長的鏈 + 鏈上長出來一些枝節使得沒有給定的樹能覆蓋這條鏈。

再一想,誒,這個長出來的枝節是不是要么不長,要么只長出來一個結點(不然肯定不優)?

那么將長/不長表示成 01 串,將給定的樹也表示成 01 串。只要沒有給定的樹對應的 01 串是我們構造的 01 串前綴即可。

那拿個什么數據結構維護一下不就 OK 了嗎,反正每個串只會插入/刪除一次。

再一想,誒,那樹的深度是不是只有 O(log) 啊。草我到底為什么要自己坑自己,都推到這一步了還搞這些飛機。

過了大樣例,就沒管了。不對啊,不是聽說大樣例很強嗎。

然后開始 t3,發現我連 \(O(n^2)\) 都不會。

盲猜無解就是沒有橋;盲猜 A 特性直接最短路;盲猜 B 特性可以 dp(不對這個好像不需要猜)

結果,t3 的 B 特性直到考試結束也沒有調出來。草,怎么感覺我兩天干了同一件離譜的事。


考完估分,由於還沒察覺到我 t2 的問題於是隨口估了個 220 (其實我本來以為 245 遍地走結果發現好像不是這樣的?)

下午查分,發現 t2 果然掛了。不過還是被告知可能有機會,於是稍微期待了一下。

結果,草,要不要這么搞我心態。


話說今年的 D1T2 和 D2T2 是同一個出題人出的?

這個 day1 考掛 day2 差點翻盤的劇本怎么熟悉。誒,這不是去年 yhn 學長省選時的情況嗎。


「補題記錄」

主要是兩天的 t3。t1, t2 的大致思路寫在上面(也就是說我考場想到的沒啥大問題)

「NOI2020」時代的眼淚

夭壽啦,數據結構封建王朝復辟啦。

直接分塊可以做到 \(O((n+m)\sqrt{n})\),題解中給出了一個 \(O(n\sqrt{m}+(n+m)\log^2 n)\) 的做法:

我們可以對平面分治,則答案可以通過下圖(粘自題解)的方法計算:

將平面分治的結構(即樹套樹)存儲下來,對於任意詢問,可以將詢問拆解成 \(\log\times\log\) 個樹套樹結點:

就變成了樹套樹上的查詢 + \(2\log\) 個區間逆序對。

你可能想說:“這不是 \(O(m\sqrt{n}\log n)\) 的做法嗎,怎么就給忽悠成 \(O(n\sqrt{m})\) 了呢?”

考慮在某一層有 \(p\) 個元素與 \(q\) 個詢問,通過二次離線莫隊可以做 \(O(p\sqrt{q})\) 的區間逆序對。那么總復雜度為:

\[T(n,m) = \sum_{k=0}(\max_{\sum m_i = 2m} (\sum_{i=1}^{2^k} \frac{n}{2^k}\times \sqrt{m_i})) \]

中間的 \(\max\) 表示取最劣情況;可以解得 \(T(n,m)=O(m\log n + n\sqrt{m})\),因此總時間復雜度 \(O(n\sqrt{m}+(n+m)\log^2 n)\)

不過由於我自帶大常數所以目前卡在 88 分(本地測試發現瓶頸在樹套樹,可能是 \(O(m\log^2n)\) 的內存訪問對 cache 太不友好了)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM