【NOI 2019】同步賽 / 題解 / 感想


非常頹寫不動題怎么辦……

寫下這篇博客警示自己吧……


 游記

 7.16

 我並不在廣二參加 NOI,而是在距離廣二體育館一公里遠的包間打同步賽(其實就是給寫不動題找個理由)

 上午身體不舒服,鴿了半天才看題。

 

 T1 題意這么長?懶得看啊,但還是硬着頭皮看了

 這……dp?$Ax^2+Bx+C$?這個式子怎么處理來着?斜率優化?會了

 (其實我tm驗證了一小時這個做法)

 然后發現直接做的復雜度是 $O(nq)$ 的?

 時間上倒沒問題,可是開一個大小為 $1e8$ 的 $dp$ 數組和斜優數組,空間不就爆了?

 當時想了一下,只需要考慮每趟列車的起點和終點狀態,並且每個狀態只需要被斜優更新一次,就得到最優答案了

 可是我腦抽了以為代碼不好寫,於是沒用 vector

 直接碼 $70$ 分斜優去了,降智

 由於身體不舒服,碼得比較慢,式子都寫了半天

 寫寫寫,測了一發,然后瞎調了幾分鍾,測第一組樣例……

 輸出 $94$?

 這就過了?

 然后第二組樣例輸出了 $31$

 我就手算了一下第二組樣例,發現手算的答案是 $(2^2+2\times 2+3)\times 2 + 9 = 31$ 啊

 樣例錯了?我翻了一下公告欄,沒說啊

 於是我又讀了一遍題,發現等 $0$ 秒也會加 $C$ 的煩躁值……

 然后又腦抽瞎改了十幾分鍾,總算過了第二組樣例

 然后第三組和第四組樣例跟着直接過了

 第五組樣例是 $1e5$ 大小的數據,我數組開不下,沒測

 

 T2 是什么玩意?數數?$3s$?那估計又是一堆大常數卷積跑跑跑,rqy 肯定已經切了

 我不可能會的,准備最后再寫這題

 然后因為身體原因去養生了,0.5h 后才回來

 

 T3 又是什么玩意?

 冷靜分析一下,感覺像貪心

 思考了一下,有一種每次保證能多一對公共下標的貪心,於是試着寫了一波

 然后就寫了 1.5h

 寫完就秒過了第一組樣例……

 然后測第二組樣例,發現錯了 $3$ 個左右的答案

 然后發現需要記一個 $del$ 數組

 改完還是錯

 然后發現還需要動態往堆里加數

 這次改完后,只剩最后一個答案錯了

 你讓我調 $n=7$ 的數據就算了,還讓我調 $n=18$ 的數據啊,$a_i$ 和 $b_i$ 還是 $9$ 位數,當我按計算器不要時間的?

 於是放棄了,轉去寫個暴力

 然后因為寫代碼圖省事,導致暴力調了 1h

 心態爆炸,我當我復習如何 $dp$ 了

 

 最后想到了 t2 的 dp,然而沒時間寫了,只好趕緊 rush 一發暴力,最后十秒鍾交上去了

 交上去后發現 check 函數有一行寫錯了……然而網站強制結束了比賽

 分數 $-$ inf

 算了,反正我是養生選手,不計較了

 

 

 考后找 $zyf$ 等人聊天,發現 $zyf$ $t3$ 的 $64$ 分沒調完,暴力也沒調完,為他默哀

 初三巨佬 $scb$ 打了 $70+35+28=133$,可以了

 然后大眾分大概 $100+35+28=163$ 左右吧?

 您們是怎么把 t3 卡常卡到 $40$ 分的

 

 后來突然意識到我的 T1 做法改成 $vector$ 寫法后就是 $O(m\log{m})$ 的正解……可是我沒(lan)去(de)寫,我蔡爆了

 T3 的網絡流模型很裸……$64$ 分是優化網絡流,$100$ 分時貪心模擬網絡流……我說怎么覺得這題就是貪心,只不過肯定要支持撤銷

 

 出題人把 d1t1 的 $q$ 放得那么小,原來是為了放叉積判斜率大小的人過……沒想到把 $O(mq)$ 的做法放過了……

 這……出題人的智商……

 

7.18

 有些煩躁,這天的情況就寫短些

 

 T1 是啥啊,無向圖最短路?數據范圍很 kdt 啊?

 可是我不會 kdt 上跑最短路,涼了涼了

 然而前 88 分是送的,兩個暴力 subtask,一個一維線段樹優化建圖 dij,一個二維線段樹優化建圖 dij

 此處省略一萬字過程

 

 T2 一開始看錯題了,以為兩個概率是分開算的,也就是一輪可以不拿任何一張牌……

 然后發現這根本沒法做,於是糾正了題意

 花了幾十分鍾推了個 $30$ 分 dp,然后發現轉移是固定的,數據范圍也很合適,$40$ 分矩陣快速冪即可

 您們咋天天讓老年選手寫這種 dp 啊,我頭發快掉光了

 

 T3 夭壽了,NOI 真出交互題了

 我到現在都不會做 I 君的商店

 題意還是比較好理解的

 然后寫了幾頁的交互題格式說明,一眼帶過

 然后看了下數據范圍,不難發現前 20 分就是 $\frac{n^2}{2}$ 次的暴力

 然后 A 的亮點就是保證每個點的度數恰好為 $1$,共 $\frac{n}{2}$ 條邊

 對於一個點,你可以二分它所在邊的右端點在哪

 然后把所有的點集體二分的話,不就是分治嘛

 woc,這暴力分也太裸了,估計在現場賽沒啥區分度

 但還是硬着頭皮寫吧

B 有亮點么?沒有?不會滾

 

 考后發現 t1 就是 kdt+玄學卡常

 好神仙,慢慢學吧

 t2 出具體數學上的原題是幾個意思,難怪不少人切了

 t3 有人討論么

 大眾分 $100+40+36=176$ ?不敢保證大家都是這個水平,但不到這個成績好像就會被吊打

 無腦猜測兩天大眾分 $163+176+100=439$

 

 晚上出榜,哇 rqy rk4,哇 myh rk7,哇 zsy rk30,哇 lbt rk45,哇 hzk rk57,哇 oyyp rk138,哇 wjh rk232,哇 xgy rk264

 這分差有點小啊,銀牌后段的分數特別密集

 時中 477 分卡線進集訓隊了恭喜他鴨

 等會隊線多少?477???

 信競好可怕啊

 回想一下,我預估的大眾分才 439 分?現在看來這頂多說是簽到分……

 我原本以為到了這個分就比較保險地有學上吧?

 想多了,不存在的

 實際情況是,如果您沒到隊線,您的所有前途都是未知數

 詳見后記

 

 題解

 回家路線

 題意

  有 $n$ 個點和 $m$ 趟列車,第 $i$ 輛列車於 $p_i$ 時刻從 $x_i$ 號點出發,於 $q_i$ 時刻到達 $y_i$ 號點。

  有一只小貓要從 $1$ 號點坐車到 $n$ 號點,中途可能需要在某些站等待一段時間。每次 $t$ 個時刻的等待,都會使小貓的煩躁值加 $Ax^2+Bx+C$($A,B,C$ 為給定的全局常數)。假設最后它在第 $z$ 個時刻到達終點,它的煩躁值會再加 $z$。

  求小貓到達終點所需的最小煩躁值。

 題解

  為什么說我腦抽呢?

  這題的 $O(mt)$ 做法是個裸 $dp$(空間上只需要開一個 $O(nt)$ 的 $dp$ 數組)。設 $f(i,j)$ 表示第 $j$ 秒小貓在 $i$ 號點時,最少需要積累的煩躁值。實際上只需要保留每趟列車出發到站兩個狀態,其它的狀態忽略掉就行了……所以轉移時只會是

  如果用斜優的話,就是給每個點動態建凸包。只保留每趟列車出發到站兩個狀態,這樣斜優狀態總數不會超過 $n$,所以總轉移次數不會超過 $n$,時間復雜度是 $O(m\log{n})$ 的。空間是 $O(m)$ 的……我之前沒改所以是亂說的,不要在意

  另外直接用一個單調指針掃每個凸包的最優點就行了,不用二分(當然我寫的代碼里加了二分的注釋),如果一個凸包加入的新點取代了凸包后面的過多點,導致指針指的下標超過了凸包大小,就把這個指針設為凸包的最后一個點。這個原因很簡單,不明白的可以思考一下。

  細節請看這篇博客,他撞過的車我寫的時候基本都撞過了(考慮一下在凸包上二分一個 $\le p$ 的區間是蠢到什么份上了)

  O(mt) 代碼

  O(mlogm) 代碼

(我沒刪調試,也沒去掉 #define int long long,不要在意)

 另外 $O(m\log{n})$ 的這份代碼交到 loj 不知道為什么全 RE 了,求知道原因的人在評論區通知我,謝謝了!

 upd:我tm通過若干發提交終於二分出了 RE 的根源……

      簡直出乎我所料,vector 的 size 函數返回的是 unsigned int,然后我是把它減 $1$ 再跟其它數比較的,然而當 size 為 $0$ 時,它減 $1$ 就變成了 $2^{32}-1$……然后導致比較大小出錯,而這個比較大小的地方還是判斷需不需要把 $vector$ 往后新開下標,一比較錯就會使程序誤認為后面的下標已經開了,於是直接給后面沒開的下標賦值,直接 RE……

      可我不知道為什么 luogu 能過啊???

      問了一下 scb 大佬,他說他也遇到過 2 次這個問題,而且因為 stl 庫不是你寫的,這些問題你通常查不出來……最好的解決辦法就是把所有能給你顯示 warning 的編譯命令都加上,如"-Wall -Wextra -Wconversion"。一定要重視程序的 warning,warning 里警告了你程序里所有不同類型之間做了運算的地方,這些運算一旦崩了,如果你不看 warning,很可能調到你懷疑人生(沒錯,這個 RE 問題已經調得我懷疑人生了)

   

 機器人

 題意

  不想簡述,或者說原文說的都有用……

 題解

 35pts

  

 序列

 題意

  給你兩個長度均為 $n$ 的正整數序列 $A$ 和 $B$,要求從兩個序列中各選 $K$ 個下標,且至少有 $L$ 個下標在兩個序列中都被選。

  你需要最小化 兩個序列所有被選的下標對應的數的和。

 題解

 


 

 總結

 1. 個人認為 d1t1 出的數據范圍不好 且評測數據太水,被簡單爆搜亂過,錯誤爆搜都騙了一堆分,這題放應該考慮放到普及組

 2. day1 的區分度不會就是信仰吧

 3. ckw 被卡在 rk51(表上寫的是 rk53,但好像跟 rk52 同分,且 rk3 的 zzq 應該會退隊),沒能進國集,簽了北郵……為他默哀,我認為他有水平進前 50 的。

 4. (有點長)

  我通過交流得知,現在競賽政策改革造成了很不好的影響。以前是清北保送前 50 名,差一點的還可以保降一本線。而如今,清北只保送前 50 名,第 51-100 是給面試機會,然后給口頭一本約(就是不做保證)。這就是為什么很多人寧可簽人大、北郵、上海交大的一本,也不要清北的口頭一本。你可以當場錄音,但他們依然可能會鴿掉,即便是紙面簽約人家都能撕呢,更何況一句口述的一本(清北招生部:你這口音模仿得挺像啊,哪學的?)

  舉個撕約的例子,這次 SD 隊有個同學在 thuwc2019 拿了二等約,然后清華承諾只要他進了省隊就換成一等約。他進了省隊了,然后這次 NOI 打 鐵 了,導致清華收回了一等約,他直接沒學上了……

  在此我就是想告誡大家,學這個競賽真的不容易。總有人覺得這個競賽人少啊,知識簡單啊,各大高校又重視這個競賽的人才啊,就以為這是個通往清北等高校的捷徑。我干脆直接說了,這門競賽根本就不是捷徑,走不好甚至是死路。別看大家都學得挺好,這里面有真學好和假學好之分;別看這個競賽的招生比例挺高,自己看看周圍的實際情況,十個信競生里平均有九個是到了高三瘋補文化課的。我也不敢說到底怎么學才是真學好,畢竟我也只是茫茫人海中的一粒塵埃。但我可以肯定的是,沒有廢寢忘食地切題的決心,或是有賽過大佬的學習方法,你不可能在這個競賽出成績。現在的事實是,只有進前 50 才能拿到清北的紙面約,進前 100 才能保送 211/985,Ag 才能拿 211/985 的一本約(我也不太確定,大概是這樣吧),Cu 你就一無所獲地滾回去高考了。而全國學得比你勤奮的 OIer 遠遠不止 50 個,也遠遠不止 100 個,如果你不甘心付出些什么,你還做什么白嫖清北簽約的夢呢?

  路遙知馬力,日久見人心。希望 OIer 們心中有數,不要盲目於一時的歡樂。


免責聲明!

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



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