2018年北京省隊選拔比賽總結
北京冬令營
冬令營的題是杜教出的,難度很大。我首先花了半個小時理解了一下題意,三道題的規則看起來都很類似,並且難度都很難。既然看不出難度順序那就按部就班從第一題開始思考。
第一題是給出現有方案問最小改變幾步即可讓現有方案合法。我首先看了一眼部分分,還是有一些可以拿到的。我先試着自己出了幾組小數據,了解了一下題目,嘗試着先總結出一些規律,但是確實這一題沒有任何規律可言。既然找不出規律那就先寫暴力吧,看看后兩題之后還有沒有時間推敲一下正解。暴力已經打好了,樣例調了半個小時,可是確實復雜度太高了,真的是n*m的n*m次方的廣搜,但是得分太少了,我准備拿一些部分分再去看后兩題,於是我寫了一個特殊數據暴力就去看第二題了。
第二題是讓你直接構造一組方案,並且合法性判斷由加法變為異或了。拿到這題后真的是除了最暴力的暴力一點頭緒也沒有,打了一個暴力走去第三題了。
第三題是讓你求出類似總方案數的值,此時還有一個半小時就結束了,而且這一題的暴力貌似非常好打,於是先把暴力打上,樣例過了,然后嘗試想正解。這種難度的考試要是A了一道題立馬就能前幾名了。但是杜教的題哪能這么簡單讓你A?我耗盡了時間也沒能想出一點靠譜的方法,查了查文件名就只好交卷了。
結果我有點記不清了,好像是我拿了兩個暴力分,一共30分,也就二十來名吧,省選努力A點題吧。
省選一試
抱着A題的信心步入賽場。
拿到題后立馬看到了第三題,樹上路徑求和,打了多年樹剖板子的我立馬花了半個小時就打好了,樣例一次就過了。心想這肯定正解了啊,復雜度肯定O能過啊,於是寫了暴力和對拍保證了正確性后開始攻戰前兩題。
第一題是給你一個二進制的串,每次兩個操作,修改某一位的值和查詢一段區間有多少子串在重新排列后是三的倍數。我一想這重新排列其實有關的就是0和1的個數問題,馬上打了個表把規律找出來了,那怎么利用規律呢,想到了n三次方預處理,那就是暴力分啊,於是趕緊了一下每次修改O1,每次查詢On,總共復雜度n平方級別的,足夠拿到前百分之五十的點了,那今天就已經有了150分了。處理完第一題已經過去兩個小時了。
第二題是圖染色問題,找了一個小時的規律,實在是找不到,於是打了一個最暴力的暴力,期望得分20分。
還有一個多小時,突然想到第一題帶修改,查詢,那么莫隊應該可行!於是我立馬開始思考這道題的莫隊應當怎么實現。眼看着這題馬上就能A了,但是我還是在處理一個細節時發生了問題。原來是變量定義的問題,我應當定義別的意義的變量。修改后開始調樣例,調了一個半小時沒調過!我這才發現莫隊算法在這題的實現上有着致命的漏洞,有一些值是沒有辦法維護的,我只能放棄了寫了一個多小時的莫隊算法,交了50分的n平方算法。期望得分有170分。
吃飯時突然想到,第三題貌似樹剖是nlogn的,我套的樹狀數組也帶着一個logn,總體下來有nlog方n,最大的點三十萬,再乘上題目里的常數可能會T!同學最后算了log方理論上是能過的,但是我蠢了,明明可以O1前綴和維護的,我卻沒看見沒有修改操作而寫了一個logn樹狀數組,當時還想着我還可以把樹剖套的線段樹改成樹狀數組常數可能小,簡直是有點蠢了。
最后結果下來時,我看到我第三題其實是A了的,這我才放心了。但是下一秒,我看見了第一題的0分,我立馬就悲劇了,講題是我才明白這題細節賊多,而我考慮到的只差了一個細節,正好樣例還不包含這個細節,一下50分變0分,悲劇了。第二題也因為圖的染色細節丟了第二個點的暴力分,只得到了10分,講題時說這道題部分分使用特判寫的,也是賊惡心,正解也是賊惡心。省選一試就拿了110分,三十名。只有明天A道題來翻盤了。
省選二試
A題說的容易,做出來是真正困難。
拿到題后我驚奇地發現第一題是一道提交答案題!提交答案題非正解就是比誰更能手玩數據了唄。再一看題面,是一道純種智商題,題意就是兩個人猜數,裁判生成兩個數,把兩個數的積告訴A,和告訴B。A和B只要說了幾次不知道就能猜出這兩個數。讓你出兩個數,能讓A和B說出指定次數的不知道。看完題我就有想法了,這不就是乘積和和有幾種拆分的問題嘛。可惜這題思維含量太高了,我低估了這道題。A和B的思維是互相影響的,就是說A必須要猜到B的想法,而B也要根據A的回答腦補一堆情況。兩層我就已經快要想不明白了,最大的層數有15層,那豈不是得和出題人心有靈犀才能A掉這道題啊?於是我把我認為的兩層的解打出來了,之后就去看第二題了。
第二題是一道數據結構題,就是給你一條鏈,每次兩種操作,把u到v的路徑上的值都加上d和查詢長度為l到r的路徑的和的和。一開始我想用線段樹維護維護,但是這個想法立馬就被我否決了,每個點對於l到r的加權不一致,且每次詢問的l,r也都不盡相同。要是真用線段樹維護,那也得建n個線段樹,空間時間保准爆炸。於是我先打了加了預處理每個點對於每個長度的加權,最后查詢時On處理,總復雜度n平方,能拿到40分。我先去看看第三題。
第三題是一道期望題,期望題我做的不是很多,處理方法也只是略知一二。我開始研究這道題的概率DP方程。經過一個小時的奮戰,成功推出了式子。既然推出了式子就可以嘗試A掉這道題了,於是我開始展開這個式子,突然發現fn是關於fn+1到f0的,就是這些式子之間不能用遞推來算f值。我又突然落入迷茫之中,既然無法遞推這個式子,那么我不但寫不了正解,連暴力都很難打出。我一直在想這道題暴力應該如何打,但就是因為這些式子互相影響,就算記憶化搜索也是無限遞歸下去的。但是這道題總不能不做,我開始對n小於等於3的數據每一組進行手動計算,也就2*2*3*3=36種。大概算到五六種時,突然發現我這就是在浪費時間!真正要算完全部36種結果兩個小時也不為過,我急忙寫了一些特判就關掉了第三題。我應當考慮如何在我現有的水平下拿到更多的分。於是距離結束還有一個小時的時候,我又重新關注了第二題的大數據部分分。其中確實有一些簡單就能拿到的部分分,拿了大約10分左右的部分分,檢查了文件名就交卷了。
第一題智商題我明顯對於某些情況討論錯誤,40分兩層的分數中我只拿到了12分,而第二題是最坑的,由於是一條鏈,我就直接拿線性結構直接維護了。但是路徑上的兩個端點可能是逆序的,你需要swap一下即可拿到40分。於是第二題我只拿到了特殊數據的5分,只能說在今后的學習與競賽過程中再長點記性吧。第三題我的特判就是完全失敗了,屈辱爆0。講題時我才知道這一類期望題的暴力是可以拿高斯消元法來解式子的,只能說我還是太年輕了。
總結
其實這次省選我的聯賽分數並不突出,再加上缺乏對於真正難題的思考,這次省選我就屈辱滾粗了。希望在2018年還是要多刷題,見識多了,做題的方法才能顯現出來。下次聯賽和省選還是努力吧,爭取明年光榮進隊而不是屈辱滾粗吧。