程式碼源CSP-S模擬賽Day7-9賽後總結
Day7
賽時
先掃一遍題,T1 顯然數位 dp# 程式碼源CSP-S模擬賽Day7-9賽後總結
Day7
賽時
先掃一遍題,T1 顯然數位 dp,感覺放在T1應該不難,而且題面有一種很親切的感覺,感覺很可做。T2 簡單思考一下發現最終合成的數就是 \(a_1\),\(a_2\),\(a_3\)……,\(a_n\) 這 n 個數填正負號再加上一個 k 的倍數,估計會有一些比較智慧的手法,感覺很有趣。T3就是簡單思考了一下自環和重邊的處理,然後就去看 T4了。T4 領域查詢好像之前jsy模擬賽裡出了一道題,題目很像,那道題好像用了樹剖。這道題貌似是進階,但前幾檔大眾分有線段樹,以及還有一檔或兩檔不是那麼大眾分的好像能預處理然後線上搞,給我一種躍躍欲試的感覺,於是計劃給這道題留的時間比較多。
T1 一眼數位dp,首先 n 個數或起來的值等於和顯然各個位置上有且只有一個數是 1。於是就先碼了一個 55 分的 dp,\(f_{i,mask}\) 表示前 i 個數或為 j 的方案數。正解不怎麼會了,原因是忘了數位 dp 的狀態設定是什麼了,我好像記得沒有開過數位 dp 的專題。
T2 想到給這些數新增正負號之後 15分暴力分就直接出來了。但我沒有想到怎麼確定最後的正負號到底怎樣才最優。感覺合法的方案數肯定不唯一,想到了 \(n^3\) 的dp可以處理出來所有合法方案,但資料範圍沒有給這一檔部分分,感覺可以再想想不想耽誤太多時間決定不碼暴力直接跳,等會回過來再想,於是就先跳了。
T3簡單想一下,發現只會暴力,但看時間發現已經十點多了,我還計劃著給T4多留時間呢,暴力都沒碼就撤了。
T4碼dfs序和線段樹的時候由於函式與Sub1的函式重名,害我de了十幾分鍾。然後想了一下不大眾的擋,之前感覺能拿40 ,發現有一個超了,但也還多了十分。\(O(10n)\) 的預處理,迅速開碼,然後是痛苦的debug,大概在11點20多的時候交上去發現 TLE ,我本地測了一下,答案是對的,但跑了8s,想了一下,菊花圖可以把它卡掉,GG。此時距離比賽結束不到40分鐘。
T2,T3暴力都沒碼,我速速的30分鐘碼了2道題的暴力,此時11:57。沾沾自喜,以為穩了,這時我迅速提交T2,發現edge炸了……慌亂之下問了雪月花果斷切谷歌,結果提交T2的時候由於太急多點了幾下,直接給我提示15s後再提交,此時北京時間11:59分,省去中間焦急的等待過程,最後一分鐘極限交上兩道題,並且成功選擇了C語言(由於之前沒有用谷歌登過程式碼源),於是兩題爆蛋。
最後40分鐘心態爆炸了,犯了許多很糖的錯誤,如果我穩一點,至少BC的暴力分能拿。以及以後不要再像當時一樣T2T3暴力都不碼,直接去做資料結構了。
賽後
T1 大概是一個很典的數位dp,如果你狀態設定對的話,A 掉還是比較容易的,並且正解的狀態也是很經典的狀態設定,\(f_{i,mask}\) 表示從高到底前 i 個 1 分配,mask 表示哪些位置被“卡滿”了的方案數。轉移是顯然的。我們只需列舉每個數,如果它被卡滿了,且 \(r_i\) 的這一位是 0 ,那麼 1 就不能給這一位,否則就可以給,正常的轉移即可。
T2 想到 \(n^3\) 可以處理所有方案了,但沒有想到竟然還有神秘規律,打表!!!!
T3 是在生成樹上大膽貪心,基本懂了,T4 是跑 bfs 序,存下每個點第 i 層的區間解決鄰域的修改查詢,子樹修改查詢怎麼處理呢?感覺不是很會啊。
T1 T2 已訂,T3 T4 待訂。
Day8
賽時
T1 讀完題後忘記了資料範圍,以為 n 是一個 2e5 級別的,於是以為這是什麼神秘貪心,神秘性質題,在草稿紙上手玩了30分鐘式子,有了一個初步的dp想法,但是複雜度很高,於是碼了個暴力就撤退了。
T2 首先隨便搞了一個較複雜的 n^3 做法,列舉 i,列舉 k,再列舉 \(a_j\) ,預處理各個顏色的字首和,把i到k之間的\(a_j\)個數乘上\(k\)後面的個數即可。簡單調了個十分鐘,隨後考慮下一個 \(n^2\) 的檔。我們在紙上畫畫圖發現可以直接列舉 k 和 \(a_j\) ,然後預處理k前與k顏色相同的位置中間的k的個數以及有多少個i覆蓋到它,做一個類似帶權字首和的東西,再做一個定義類似的字尾和。預處理是 \(n^2\) 的,統計答案也是 \(n^2\) 的。但是這個思路很使,細節很多,對著那麼多式子硬調到9:30,就交了個 \(n^3\) 上去,撤退了。
T3 一看資料範圍,以為是什麼神奇且逆天的貪心,再加之這時 whrdalao以及 xueyuehuadalao貌似(好像)都過了 T1,於是迅速跳了 T4 ,碼了個暴力,回頭看T1了。
覺得T1 沒準詐騙,回頭看了眼,好傢伙,n<=100……,於是開始考慮了一下 dp 的細節。首先這個dp我們得從後往前d,原因是你從前往後d是有後效性 的,你不知道你後面到底打多少次,無法統計貢獻,所以 初步設定狀態是 $f_{i,j}表示考慮從 n 到 i ,你總共加了 j 的傷害的最大總傷害。發現對於 2 操作是無法轉移的。紙上手玩一下發現這玩意兒轉移還需要一個攻擊回合下標和,於是狀態就是這三個東西,差不多是 1e8 級別的,轉移顯然。A的時候差不多比賽也接近了尾聲。最後20分鐘都在調T2 ,不出意外 \(n^2\) 沒有調出來,不過值得慶幸的是第一遍碼的時候沒有注意到取模,第二遍加上了,有驚無險沒有掛分。
賽後
T2 首先題解 \(n^2\)的做法簡潔明瞭。直接列舉 j 和 k ,然後字首和統計一下前面的 \(a_k\) 數和後面的 $a_j $ 數,乘起來。正解好像是個根號分治 ,出現次數大於 B 的……完了完了,忘了。
T3 竟然就分討+模擬,賽時尊嘟被嚇到了。
T4 不是很懂,而且講得時候還有什麼and卷積什麼的,畏懼了。
T1 T3 已A,T2 T4待訂。
Day9
賽時
T1首先想到了最終的糖果數一定是一個定值,為所有糖果 &
起來的值。然後直接就用這個東西碼了個你\(n^3\) 區間dp,發現同機房dalao們基本都過了,很慌,並且此時時間已經是開賽快一個小時了,所以就跳T2了。
T2好像做過原,也忘了什麼時候的事了,由於1個小時還沒有 AT1,心態有點炸,當時不敢細想T2 ,知道T2 碼量大,直接考慮暴力了,但是考慮我想了個暴力寫完調完發現T了,仔細思考後發現我對於多個乘法用了乘法分配率,將n個數分別與3相乘再乘一塊變成了n個數乘一塊然後乘3……,暴力碼炸了心態更崩了。
當時想穩住心態,決定無論怎樣T1 必須A,不然後面的題肯定做不好。果斷回去。仔細思考了一下,我們可以把原序列分成若干段,這幾個段滿足段內異或和為整個序列的異或和,發現最優的情況下就是每個段的長度減一再相加。接下來是怎麼劃分的問題,不妨假設只要當前異或和正確了,就開新的一段,這樣做一定是優的,因為你考慮我把後面的那個數劃給這一段的話除非後面的所有數都構不成一個正確的異或和,否則的話我這個數往哪個段上合併均可。如果後面的數都合不成正確的異或和的話他們所有的數肯定都要往這個段合併,我們直接特判掉就行了。於是做完了。
T3 一開始理解錯題意了,我還疑惑你直接給 n 不就行了,給我序列幹啥。大力推到了一波式子,用組合數公式胡搞了幾分鐘,發現可以 O(n)求,我心想,就這麼簡單???於是果斷開碼,然後直接過樣例了,交上去後面的都Wa 了。感覺式子很對,但不知道為啥,打表輸出了發現程式完美的執行了我的思路,此時剩30分鐘,T3T4暴力沒碼,於是跳 T4 碼了暴力回來,在最後15分鐘的時候讀懂題意了,速速碼了個若只暴力,然後又想了個25分的,速速碼了一下,成功在比賽結束後第 0.0001s 完成。
這場打炸了,簽到做太久,而且T3理解錯題意了,直接把dp題整成數學題了,前面太急了,後面太糖了
賽後
T2 是貪心,\(\frac{n^3}{w}\)判掉無解。接下來考慮最壞情況每行每列都操作,由於保證有解,我每行找到最多有多少列是互相相等的這些列我橫著塗,其他的我豎著塗。再在列上也搞一遍就行了。
T3 是簡單dp,沒啥好說的,都怪我太糖了。
T4 是圖論好題,離線的部分聽懂了,線上的k=1聽懂了,k>1的倍增沒搞清楚,待訂,T1T2T3都訂了。
感覺這場的問題就是心態和時間分配,其實T3比T1簡單,但我沒時間做了。
簡單總結
這幾場打下來主要還是時間分配和心態的問題,T1實際上是可做的,但一時的思維短路可能會影響到整場比賽的心態。這種情況下我們要迅速 碼完後面的暴力,再回來磕,不能戀戰。
明確哪些題是可做的,比如今天的T3 ,雖然放在T3的位置,但就是一個很典的dp,沒有分配給其足夠時間導致爆蛋。
有一些題我們不能僅憑感覺,題面去判斷它,要經過深入的思考,不能想當然,這樣往往導致錯誤的時間分配,感覺放在T1應該不難,而且題面有一種很親切的感覺,感覺很可做。T2 簡單思考一下發現最終合成的數就是 \(a_1\),\(a_2\),\(a_3\)……,\(a_n\) 這 n 個數填正負號再加上一個 k 的倍數,估計會有一些比較智慧的手法,感覺很有趣。T3就是簡單思考了一下自環和重邊的處理,然後就去看 T4了。T4 領域查詢好像之前jsy模擬賽裡出了一道題,題目很像,那道題好像用了樹剖。這道題貌似是進階,但前幾檔大眾分有線段樹,以及還有一檔或兩檔不是那麼大眾分的好像能預處理然後線上搞,給我一種躍躍欲試的感覺,於是計劃給這道題留的時間比較多。
T1 一眼數位dp,首先 n 個數或起來的值等於和顯然各個位置上有且只有一個數是 1。於是就先碼了一個 55 分的 dp,\(f_{i,mask}\) 表示前 i 個數或為 j 的方案數。正解不怎麼會了,原因是忘了數位 dp 的狀態設定是什麼了,我好像記得沒有開過數位 dp 的專題。
T2 想到給這些數新增正負號之後 15分暴力分就直接出來了。但我沒有想到怎麼確定最後的正負號到底怎樣才最優。感覺合法的方案數肯定不唯一,想到了 \(n^3\) 的dp可以處理出來所有合法方案,但資料範圍沒有給這一檔部分分,感覺可以再想想不想耽誤太多時間決定不碼暴力直接跳,等會回過來再想,於是就先跳了。
T3簡單想一下,發現只會暴力,但看時間發現已經十點多了,我還計劃著給T4多留時間呢,暴力都沒碼就撤了。
T4碼dfs序和線段樹的時候由於函式與Sub1的函式重名,害我de了十幾分鍾。然後想了一下不大眾的擋,之前感覺能拿40 ,發現有一個超了,但也還多了十分。\(O(10n)\) 的預處理,迅速開碼,然後是痛苦的debug,大概在11點20多的時候交上去發現 TLE ,我本地測了一下,答案是對的,但跑了8s,想了一下,菊花圖可以把它卡掉,GG。此時距離比賽結束不到40分鐘。
T2,T3暴力都沒碼,我速速的30分鐘碼了2道題的暴力,此時11:57。沾沾自喜,以為穩了,這時我迅速提交T2,發現edge炸了……慌亂之下問了雪月花果斷切谷歌,結果提交T2的時候由於太急多點了幾下,直接給我提示15s後再提交,此時北京時間11:59分,省去中間焦急的等待過程,最後一分鐘極限交上兩道題,並且成功選擇了C語言(由於之前沒有用谷歌登過程式碼源),於是兩題爆蛋。
最後40分鐘心態爆炸了,犯了許多很糖的錯誤,如果我穩一點,至少BC的暴力分能拿。以及以後不要再像當時一樣T2T3暴力都不碼,直接去做資料結構了。
賽後
T1 大概是一個很典的數位dp,如果你狀態設定對的話,A 掉還是比較容易的,並且正解的狀態也是很經典的狀態設定,\(f_{i,mask}\) 表示從高到底前 i 個 1 分配,mask 表示哪些位置被“卡滿”了的方案數。轉移是顯然的。我們只需列舉每個數,如果它被卡滿了,且 \(r_i\) 的這一位是 0 ,那麼 1 就不能給這一位,否則就可以給,正常的轉移即可。
T2 想到 \(n^3\) 可以處理所有方案了,但沒有想到竟然還有神秘規律,打表!!!!
T3 是在生成樹上大膽貪心,基本懂了,T4 是跑 bfs 序,存下每個點第 i 層的區間解決鄰域的修改查詢,子樹修改查詢怎麼處理呢?感覺不是很會啊。
T1 T2 已訂,T3 T4 待訂。
Day8
賽時
T1 讀完題後忘記了資料範圍,以為 n 是一個 2e5 級別的,於是以為這是什麼神秘貪心,神秘性質題,在草稿紙上手玩了30分鐘式子,有了一個初步的dp想法,但是複雜度很高,於是碼了個暴力就撤退了。
T2 首先隨便搞了一個較複雜的 n^3 做法,列舉 i,列舉 k,再列舉 \(a_j\) ,預處理各個顏色的字首和,把i到k之間的\(a_j\)個數乘上\(k\)後面的個數即可。簡單調了個十分鐘,隨後考慮下一個 \(n^2\) 的檔。我們在紙上畫畫圖發現可以直接列舉 k 和 \(a_j\) ,然後預處理k前與k顏色相同的位置中間的k的個數以及有多少個i覆蓋到它,做一個類似帶權字首和的東西,再做一個定義類似的字尾和。預處理是 \(n^2\) 的,統計答案也是 \(n^2\) 的。但是這個思路很使,細節很多,對著那麼多式子硬調到9:30,就交了個 \(n^3\) 上去,撤退了。
T3 一看資料範圍,以為是什麼神奇且逆天的貪心,再加之這時 whrdalao以及 xueyuehuadalao貌似(好像)都過了 T1,於是迅速跳了 T4 ,碼了個暴力,回頭看T1了。
覺得T1 沒準詐騙,回頭看了眼,好傢伙,n<=100……,於是開始考慮了一下 dp 的細節。首先這個dp我們得從後往前d,原因是你從前往後d是有後效性 的,你不知道你後面到底打多少次,無法統計貢獻,所以 初步設定狀態是 $f_{i,j}表示考慮從 n 到 i ,你總共加了 j 的傷害的最大總傷害。發現對於 2 操作是無法轉移的。紙上手玩一下發現這玩意兒轉移還需要一個攻擊回合下標和,於是狀態就是這三個東西,差不多是 1e8 級別的,轉移顯然。A的時候差不多比賽也接近了尾聲。最後20分鐘都在調T2 ,不出意外 \(n^2\) 沒有調出來,不過值得慶幸的是第一遍碼的時候沒有注意到取模,第二遍加上了,有驚無險沒有掛分。
賽後
T2 首先題解 \(n^2\)的做法簡潔明瞭。直接列舉 j 和 k ,然後字首和統計一下前面的 \(a_k\) 數和後面的 $a_j $ 數,乘起來。正解好像是個根號分治 ,出現次數大於 B 的……完了完了,忘了。
T3 竟然就分討+模擬,賽時尊嘟被嚇到了。
T4 不是很懂,而且講得時候還有什麼and卷積什麼的,畏懼了。
T1 T3 已A,T2 T4待訂。
Day9
賽時
T1首先想到了最終的糖果數一定是一個定值,為所有糖果 &
起來的值。然後直接就用這個東西碼了個你\(n^3\) 區間dp,發現同機房dalao們基本都過了,很慌,並且此時時間已經是開賽快一個小時了,所以就跳T2了。
T2好像做過原,也忘了什麼時候的事了,由於1個小時還沒有 AT1,心態有點炸,當時不敢細想T2 ,知道T2 碼量大,直接考慮暴力了,但是考慮我想了個暴力寫完調完發現T了,仔細思考後發現我對於多個乘法用了乘法分配率,將n個數分別與3相乘再乘一塊變成了n個數乘一塊然後乘3……,暴力碼炸了心態更崩了。
當時想穩住心態,決定無論怎樣T1 必須A,不然後面的題肯定做不好。果斷回去。仔細思考了一下,我們可以把原序列分成若干段,這幾個段滿足段內異或和為整個序列的異或和,發現最優的情況下就是每個段的長度減一再相加。接下來是怎麼劃分的問題,不妨假設只要當前異或和正確了,就開新的一段,這樣做一定是優的,因為你考慮我把後面的那個數劃給這一段的話除非後面的所有數都構不成一個正確的異或和,否則的話我這個數往哪個段上合併均可。如果後面的數都合不成正確的異或和的話他們所有的數肯定都要往這個段合併,我們直接特判掉就行了。於是做完了。
T3 一開始理解錯題意了,我還疑惑你直接給 n 不就行了,給我序列幹啥。大力推到了一波式子,用組合數公式胡搞了幾分鐘,發現可以 O(n)求,我心想,就這麼簡單???於是果斷開碼,然後直接過樣例了,交上去後面的都Wa 了。感覺式子很對,但不知道為啥,打表輸出了發現程式完美的執行了我的思路,此時剩30分鐘,T3T4暴力沒碼,於是跳 T4 碼了暴力回來,在最後15分鐘的時候讀懂題意了,速速碼了個若只暴力,然後又想了個25分的,速速碼了一下,成功在比賽結束後第 0.0001s 完成。
這場打炸了,簽到做太久,而且T3理解錯題意了,直接把dp題整成數學題了,前面太急了,後面太糖了
賽後
T2 是貪心,\(\frac{n^3}{w}\)判掉無解。接下來考慮最壞情況每行每列都操作,由於保證有解,我每行找到最多有多少列是互相相等的這些列我橫著塗,其他的我豎著塗。再在列上也搞一遍就行了。
T3 是簡單dp,沒啥好說的,都怪我太糖了。
T4 是圖論好題,離線的部分聽懂了,線上的k=1聽懂了,k>1的倍增沒搞清楚,待訂,T1T2T3都訂了。
感覺這場的問題就是心態和時間分配,其實T3比T1簡單,但我沒時間做了。