NOIP2018

說好的補個遊記……
雖然分還沒出,但是已經有代碼了,找到了兩套數據,測得還算滿意,沒寫炸太多地方,回頭看看NOIP,還是有遺憾的地方……

Day0

比賽前一天
作爲考場,我們把東西搬出了機房
信心滿滿,十題暴力!!!

Day1

可惜我不在自己的學校考,去年還是……
回憶着這個令我省選考炸的考場,我忐忑的走向我的座位。
早到了一會,卻不讓動電腦,腦中翻來覆去的想NOIP2017怎麼考炸的,想起來都覺得愚蠢……
密碼寫在了黑板上,我解壓完的時候還沒開始,趁老師還沒發現,先看了第一題。剛看完,老師就不讓再看了,但我早就把T1一覽無餘。
積木遊戲我還是做過的,我就花了20min20min寫了這題,現在感覺好慢
順利A了T1,來看T2。我可能想不到NOIP到底有多zz ,這個T2居然是完全揹包,我卻義無反顧的寫了同餘最短路,寫了一半,發現不對,Tnai=5×107Tna_i=5\times 10^7ccf老爺機怕是不太能過 ,我當時還不知道他換機器了。情急之下咋辦呢……對,數據分治,我就討論了一下最小的ai10000a_i\leq 10000的情況,是這樣我就同餘最短路,否則我就exgcd,這樣就是O(n3)O(n^3)
現在想起來,我比賽的時候就如同睡覺,我們分析一下這個最短路的複雜度,我寫的是單調隊列,這樣的話複雜度就是O(×n+n×min(ai))O(入隊次數 \times n+n\times min ( a_i))這個入隊次數是嚴格大於min(ai)min(a_i),且不是和這個一個級別的,我卻誤以爲是n×min(ai)n\times min(a_i),那我寫什麼數據分治呢。
再插敘一段,比賽結束後,我有一天突然發現這個複雜度不是O(min(ai))O(min(a_i)),我慌了,以爲是O(n2min(ai))O(n^2min(a_i))的,那我豈不是隻有80了,那我豈不是要退役了 。轉入冷靜分析階段,我發現如果一個位置被更新多次纔會插入隊列多次,這樣的話考慮第一次和最後一次,首先更新的來源顯然單增,因爲這是單調隊列dij,但是更新後的數據顯然單減,更有一個性質是每兩種最短路的值最少相差min(ai)min(a_i),那麼假設更新的第一次是max(ai)max(a_i),最後一次是min(ai)min(a_i),那麼每個點入隊次數最多是max(ai)min(ai)min(ai)\frac {max(a_i)-min(a_i)}{min(a_i)}次,乘一下min(ai)min(a_i)就是max(ai)max(a_i),所以總複雜度就是O(×max(ai)+n×min(ai))O(入隊次數 \times max(a_i)+n\times min ( a_i)),從漸進的角度考慮,後面沒太大用了,我那個優化顯然就是個常數問題,還白慌一場。
更加愚蠢的是這個單調隊列,既然證明次數是O(max(ai))O(max(a_i)),那麼用優先隊列輕鬆可以做到O(max(ai)log(max(ai)))O(max(a_i)log(max(a_i))),log顯然比100小很多,只是常數略大,這豈不是退化了複雜度……
最後值得慶幸的是我還是寫對了exgcd和最短路,在預測中得到了100pts,不知道ccf是不是換了機器後跑的更快……
接下來是T3,開始我還不會,但是冷靜分析,二分板上釘釘,發現每個子樹出邊只有1條,所以可以記每個子樹的最大匹配,和剩餘的最長鏈,然後匹配的時候再二分不就好了嗎……
寫出來也很快,不過我要吐槽大樣例了,太水了,我拿一條鏈拍,一下就拍錯了,發現子樹完美匹配的時候出邊不是負無窮,是0因爲根還可以匹配。
最令人傷心的是我還沒意識到根和幾顆子樹也可以連好幾條,所以我就只能連一條,所以目前只有40分。

Day2

第一題比較簡單,當時就想了枚舉邊刪掉,但是我又犯了一個老錯誤,沒測大樣例,這回還好只是第四個沒測,但是就少考慮了不連通的情況,分數=24-=24
第二題我還是犯了一個錯誤,我想到矩陣乘,就是一部分的限制:左下大於等於右上,但是寫了半天才發現錯的,也沒太多時間打表,一心想了正解,最後還是沒想出來,騙了N=2N=2N,M3N,M\leq 3,但是N=1N=1本來我考慮了,但是N,MN,M寫反了,最後大概丟5105-10分,實測一個5050,一個4040
第三題本來想拉動態最大獨立集的板子,而且我考試前是複習過的,但是最後沒有時間,就花1h糾集大暴力打算72,最後A1的寫炸了,沒了8pts,我也不管了……
總之,這次NOIP雖然是爆炸的,但也是幸運的。在接下來的訓練中努力吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章