【游記】NOI 2022 聯合省選 場外游記


下午才拿到的題,本以為考后半個小時就能拿到,結果裂開。

Day 1

開題看到三個傳統題。前兩題只有 \(10\) 個測試點,看樣子很沒區分度的樣子(

看第一題,woc 手寫編譯器是什么離譜的模擬題。

仔細看一下大概是讓你自己實現 define 語句。指令數和長度都很小,並且保證答案長度 \(\le 1000\),這不直接模擬就行,大概是把每個標識符段和非標識符段摳出來,前者放到棧里,每次取棧頂看能否用 define 展開,后者直接輸出即可。

然后看第二題,大概是樹上路徑計數,分別求合法路徑數和合法路徑權值和。\(n\) 很小 \(r\) 很大。

想了一下,感覺是枚舉路徑上的最小值然后統計,如果最小值為 \(x\),相當於每個點的 \([l,r]\)\([x,x+k]\) 取交然后統計答案。還要刪去沒有取到 \(x\) 的方案,也就是對於 \([x+1,x+k]\) 要再算一次。

那么問題就轉化為沒有差值限制的方案。直接跑樹形 DP,\(f,g,u,v\) 分別表示經過點 \(x\) 的合法路徑數,從 \(x\) 開始合法路徑數,以及 \(u,v\) 表示對應合法路徑權值和。

\(x\) 的范圍會很大顯然不能每個都算一遍,但是 \(n\) 很小,直接拉格朗日插值即可。每個 \([l,r]\) 最多拆出 \(5\) 個區間,大概是 \(5n^3\) 貌似可以過。

看了下才過一個小時,開始看 T3。題面令人大受震撼(怕不是某個 luogu 管理出的題目

很明顯的圖論特征,消息 \(x\)\(y\) 連邊,邊權為 \(y\)\(x\) 后面產生的貢獻,那么我們要求的就是最長簡單路徑,直接狀壓就能過前兩個點。

分析一下,等價於每個點只有一條入邊一條出邊,那么我們跑費用流,對於每個點,從源點連一條邊再向匯點連邊,然后再連 \(x\to y\) 的邊,邊權只有 \(1/2\) 兩種可能。

接着回去肝前兩題代碼,第一題寫了 \(50\) 分鍾,字符串處理有點惡心,很擔心數據里可能會有多余空格和行末空格,content 可能為空,也可能有空格,空格段的長度可能不為 \(1\)

然后寫 T2,雖然插值和 DP 代碼不長,但是細節不少,寫起來極度折磨,調完已經過去三個小時了。

然后開始寫 T3,寫到一半才意識到不對勁,這 tm 不是有負環的費用流嗎,並且定義和負環流不一樣,不能夠走帶負環的增廣路。

然后就開始各種奇思妙想,后來發現再把每個點拆點 \(x\to x'\),可以保證每個點只在路徑中出現一次,雖然圖會有負權環,但是這張圖如果走了負權環就一定流不到匯點。然后再跑帶負權環的費用流?好像是強制選所有負邊權然后退流,想不太清楚,感覺要翻。

回去翻看下前兩題代碼。猛的意識到求前綴和多項式的次數要 \(+1\),如果 \(f\)\(n\) 次多項式,\(u\)\(n + 1\) 次多項式,前綴和是 \(n+2\) 次,所以要插 \(n+3\) 個點,自己少插了一個點(以后寫插值不管怎么先多插幾個點肯定沒事

大概還有 \(30\) 分鍾,不大敢莽第 \(3\) 題,主要是只看過沒寫過帶負權環的流,細節也沒搞清楚。干脆寫 \(8\) 分的狀壓算了。

寫完還有一刻鍾,看 T3 哪還能拿點分,很快昂,這性質 B 不是告訴你第一問答案。離大譜直接輸出非學術消息總數有 \(20\) 分比狀壓分還多(笑哭

希望不會掛分。

Day2

開題發現題目都不長。

開 T1,發現值域很小,那么 \(n\) 必然沒用,直接開桶。

要求方案使得每個質數都存在一個倍數,根據套路顯然是容斥,考慮枚舉哪些質數沒有倍數,剩下的數產生 \(2^{cnt}\) 的貢獻。

值域 \(2000\),篩一下有 \(300\) 個質數,必不可能直接容斥,還是套路,我們容斥 \(\le \sqrt{2000}\) 的質數,剩下的質數兩兩之間互不干擾,可以線性遞推過去,那么我們只用預處理 \(f_{S}\) 表示集合 \(S\) 里的質數的倍數集合的大小,再預處理 \(g_{S,x}\) 表示刪去集合 \(S\) 里倍數后,\(x\) 的倍數有多少個。這部分預處理的復雜度是 \(14\times 2^{14}\times 305 + 2^{14}\times 2000 \ln\)。感覺卡不滿,遞推的復雜度就是 \(2^{\min\{c_i,14\}}\times \max\{0,c_i - 14\}\)

感覺能卡過去,就去看 T2。非常令人智熄,居然又是一個括號變化,和 WC2022 怕不是同一個出題人(當為民除害)

必然先建樹,操作 \(2\) 就是將一個點的兒子隨意排列,且花費代價,操作 \(1\) 就是合並相鄰兩個兒子,再將右兒子的權值接到合並后的點下面。

合並的總數必然不變,所以必然是從上往下合並,這樣層的決策集更大,決策不劣。感覺想到這里不難,難道今年題目比較簡單?

貌似有個 \(x=0,y=1\) 的部分分,手算一下就是每層把最大值留下,其余下放,直接用堆模擬一下即可。

感覺有戲,模擬一下 \(x=1,y=0\) 就是把最小值留下,其它下放。然后是 \(x=y=1\),大概是每次用最小值做 \(A\),其余做 \(B\),但是最后會把最小值留下來肯定虧了。但是可以交換順序,所以最后一次下放交換最小值和最大值的位置,那么就能把最大值留下,代價不變。

感覺挺對的,就去看 T3。樹上問題,按順序刪邊,答案最優,\(N^2\) 算法,woc 樹上的數既視感,這怕不是和樹上的數一個出題人(當為民除害)

再一看毒瘤出題人就給了一個小樣例,太離譜了。不過直接枚舉全排列不難寫可以直接對拍。

非常沒有思路,就先回去寫 T1,沒給大樣例,自己造幾個,大概 0.4s 不慌。

然后寫 T2,特別好寫代碼就 20 行,並且一次過了 3 個樣例,讓人大受震撼。

然后想 T3,一點思路都沒有非常折磨,愣是瞪了一個小時。

后來偶然翻到這題的空間限制是 \(2G\),woc 這怕不是 NOI 史上空間最大的題。那 T3 比要開大數組,大概是 \(kN^2\) 的空間?那必然是 DP 跑不掉了,看來前面想那么久的貪心可能性不大。

又推了半個小時得到一個 \(N^3\) 算法,大概是 \(f[x][y][z]\) 表示已 \(x\) 為根的子樹,刪除 \(x\) 的父邊,邊的兩端分別是 \(y,z\)。由於每個點的度數 \(\le 3\),討論 \(6\) 種可能的先后順序就行。

看下時間還有 90 分鍾,還是回去測 T1,T2。

造了幾個能卡滿的大數據發現居然要跑 \(1.8s\),沒想到居然還是個毒瘤卡常題。然后就開始了及其折磨的卡常環節,現實優化取模,循環展開的常用技巧,大概卡到 \(1.1s\),一直卡不進一秒,並且本地配置大於 CCF 機子,那豈不是當場暴斃。

后來把數組順序換了一下,\(g_{S,x}\) 變成 \(g_{x,S}\) 居然快了接近一倍,只用 \(0.6s\) 就能跑完,震撼我一整年。

然后看 T2,突然發現貪心有致命漏洞。\(x = 1, y=0\) 的時候保留最小值不一定是最優的,因為如果后面某層突然加了很多括號,並且權值很大,那么可能保留次大值,然后把最小值傳下去。

太折磨了,最折磨的事莫過於最后 \(30\) 分鍾發現自己思路錯了,就跟進了教室發現沒帶書包,到了火車站發現沒帶身份證一樣(

沒辦法,臨時寫暴搜,每次搜是傳最小值還是次小值,大概是 \(2^n\log\) 復雜度,實際跑不滿,然后就實在沒時間了,希望 \(x=y=1\)\(x=0,y=1\) 的貪心不掛。


這次模擬還是能發現了一些問題的,比如有些基礎確實是不過關,拉差寫起來和擠牙膏一樣寫了兩個小時,還不算調的時間。過於自信沒有嚴謹的推導和驗證思路的問題,導致出現結束前半小時發現思路掛了的問題。

真的省選還沒開始,希望這次模擬能有啟發和警醒的意義。

Updata:2022/4/18

根據各個 OJ 的民間數據沒有掛分 \(100+100+28+100+48+44\) ,希望 D2T2 能多點 \(x=y=1\) 的數據這樣又可以騙幾個點(

根據網上的討論和個人對難度的估計毒奶一口,強省隊線大概在 \(600\) 分左右,高分在 \(800\) 左右(包括 NOIP)

Updata:2022/4/19

官方數據 \(100+100+18+100+40+44\),D2T2 的數據分治寫掛了/ll,D1T3 數組都能開小,裂開


免責聲明!

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



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