NOI2021訓練記錄
week1(4.19~4.23)
4.19
LOJ3504「聯合省選 2021 A」支配
需要利用支配關系是一棵樹這個結論
LOJ3503「聯合省選 2021 A | B」滾榜
把貢獻拆到相鄰兩個人身上就能直接狀壓dp了
LOJ3501「聯合省選 2021 A | B」圖函數
很暴力的一道題,需要一點轉化
寫了LOJ3500「聯合省選 2021 A」矩陣游戲的50分
4.20
上午校內模擬賽
T1 發現強制在線之后前四十位和原來一樣,把這個拿出來開哈希表,枚舉1~n查詢。打表發現這樣做除開前1000個數不會有三個以上的數沖突在一起,就做完了。
T2 列出式子發現是個簡單的凸包題,用超哥樹寫掉了。
T3 想出貪心之后可以直接按位確定,考場上的寫法不太對,對不能達到最優的位的處理不太恰當,靠着數據水騙了50分,考后補掉了。
LOJ3500「聯合省選 2021 A」矩陣游戲
構造題,考慮先構造出滿足加起來=b的條件,再在不改變第一個條件的情況下構造出任意的矩陣。利用奇偶性分配正負號加上一個相同的權值,使得矩形內增量為0,轉化為差分約束
LOJ3505「聯合省選 2021 B」數對
暴力的復雜度是調和級數
4.21
LOJ2720「NOI2018」你的名字
最開始想的是把兩個SAM拼一起,就想歪了。其實直接把T在S上匹配,用線段樹合並判斷是否合法,類似於一個雙指針的過程,最后用SAM去重就做完了。
LOJ2721「NOI2018」屠龍勇士
用multiset簡單處理出攻擊力就是一個EXCRT裸題
LOJ2302「NOI2017」整數
按題意用set模擬了一下碾過去了...復雜度不會證,修改均攤\(O(1)\)的話應該是個\(\log^2\) 。
正解是把加和減分開統計,比較后綴大小,就能壓位了。
想了下 LOJ2305「NOI2017」游戲 的思路。
4.22
LOJ2303「NOI2017」蚯蚓排隊
想了個hash本來以為是\(nk^2\),看題解發現這樣是\(nk\)的。寫了個雙hash一遍過了
LOJ2305 「NOI2017」游戲
\(2^d\)枚舉之后2-SAT
LOJ3345「APIO2020」粉刷牆壁
暴力枚舉當前位計算出往后能刷多少次,最后單調隊列轉移
LOJ3346「APIO2020」交換城市
求次小瓶頸路,討論一下發現要么成環要么有一個點度數>3。在kruskal重構樹上考慮,如果一個點的子樹里有橫叉邊或者有點度數>3就滿足條件,可以倍增求出深度最深的這樣的點。
LOJ3144「APIO2019」奇怪裝置
列式子發現是統計模\(\frac {ab}{gcd(a,b+1)}\)下本質不同點個數,可以掃描線。
4.23
上午模擬賽
T1 不會,寫的暴力
題解做法是利用2n條邊的二分圖的一個性質,把鏈刪掉就只剩偶環了,然后把偶環的權值拿出來背包。
T2 費用流模型比較簡單,隨了組數據發現連向s和t的邊都沒有退流,可以直接模擬費用流,但是不會線段樹維護這個東西,所以寫了個 \(n^2\) 的暴力模擬費用流。題解里的線段樹確實比較復雜。
T3 用斯特林數拆成下降冪,轉成組合意義就是連通塊內選j個點的方案,可以dp。
題解里沒有拆,組合意義變成可重有序地選k個數,用EGF直接做也行。
week2(4.25~4.30)
4.25
LOJ3146「APIO2019」路燈
轉化為二維數點
LOJ3145「APIO2019」橋梁
分塊
LOJ2585「APIO2018」新家
multiset的麻煩操作+二分
4.26
LOJ2586「APIO2018」選圓圈
暴力+kdtree剪枝
LOJ2308「APIO2017」商旅
明顯二分,但直接拆點找負環是\((nk^2)\log w\)的,顯然無法接受。考慮優化掉 \(k\) ,即對於一次固定起始點的買賣可以預處理出最優策略,然后再最短路可以做到 \(n^3+n^2k+n^2\log w\)
4.27
上午訓練賽
T1 線性代數不會,寫了個常數巨大的矩陣快速冪。
T2 發現分塊可以不帶 \(nm\),復雜度 \(1e8\),實際跑的飛快。標程是線段樹。
T3 神經網絡提答,寄了。
LOJ576「LibreOJ NOI Round #2」簽到游戲
結論+線段樹上二分
4.28
LOJ6437「PKUSC2018」PKUSC
把貢獻拆開,發現是答案是圓在多邊形內的圓弧長度之和除以2PI。
LOJ6436「PKUSC2018」神仙的游戲
考慮一對字符對匹配失敗的貢獻,顯然一個border里只要出現0和1匹配就不成立,否則成立,那么把正串1的權值設為1,反串0的權值設為1,然后NTT。
LOJ6435「PKUSC2018」星際穿越
首先有個結論是往右跳只會最開始跳一次,然后倍增
LOJ6432「PKUSC2018」真實排名
D1T1簽到題,注意判0
LOJ6433「PKUSC2018」最大前綴和
D1T2簽到題,不過WA了好幾發才過。轉化成一邊前(后)綴和>0,另一邊<=0,直接狀壓就行了。
剩下一道斗主地沒看,晚上看PKUSC2019題解,自己編了下。
4.29
模擬賽
T1 在ZR做過原題,轉化成左兒子個數<m-1,容斥下可以\(O(nm)\),也可以dp。
T2 發現 \(i\) 的答案要么是 \(i\) 要么是 \(ans_{nex_i}\) ,剩下的就是SCOI2016萌萌噠了。
T3 先二分,樹可以直接點分治,基環樹的話可以斷一條邊,不選就是點分治,選就是在剩下的環上取一段前綴和后綴,可以用線段樹做。
4.30
LOJ2538「PKUWC2018」Slay the Spire
D1簽到題,討論一下發現有兩種情況:
- 只選一張攻擊
- 不選的m-k張里全是攻擊
然后發現 \(n^2\) 就能過,隨便寫了個dp。調了很久樣例,還WA了一發k=1一發多測清空。
LOJ2540「PKUWC2018」隨機算法
直接狀壓和存獨立集大小是\(2^nn^2\)的,有點卡。可以轉化成每次加一個點,然后轉移枚舉加的最后一個點,狀態是得到集合內的最大獨立集概率。
還剩一道斗地主不看了
week3(5.6~5.8)
5.6
上午正睿模擬,沒啥狀態有點摸
T1 構造一個有向圖滿足內向生成樹個數為給定的C,C是個沒啥性質的\(1e18\)的常數。這種一般就二進制考慮了,然后有一種構造可以使加一條邊方案數加\(2^i\)。
T2 發現刪掉的串的后綴串是沒用的,用trie處理,維護下可以自由生長節點的個數,可以生長出一個節點的節點數和總結點數。
T3 大poly,寄。
LOJ2071「JSOI2016」最佳團體
二分+暴力dp
LOJ2072「JSOI2016」獨特的樹葉
樹Hash,加個換根
LOJ2075「JSOI2016」位運算
狀壓之后矩陣快速冪
5.7
正睿模擬
T1 模數為3的二項卷積。
用lucas拆開組合數,發現下標\(\mod 3\) 加起來>=3時就為0,否則把下標除以三,按新的下標繼續分類,題解說復雜度是 \(n^{1.6}\) 。
T2 一個二分圖,每條邊有\(1/2\)的概率出現,求兩邊各隨機一個點他們之間最短路的期望。
用dp維護bfs的過程,有點卡常。
T3 求數字互不相同,且異或起來不為零的序列的數量。
如果容斥異或起來不為0(枚舉相同的數字對數)是沒法做的,因為相同的數對和原序列里的數字相同時會被算重,那么容斥異或起來為0的序列,發現我們可以輕松構造出前 \(i-1\) 個互不相同且前 \(i\) 個異或起來為0的序列,剩下的一個稍微討論下就好了。
下午學校模擬 沒題解,不知道T1咋做
T2 把貢獻拆開再算下概率就能 \(O(n)\) 了
T3 討論下大小發現貢獻是\(n\)條折線加起來的形式,掃描線維護。
5.8
LOJ2073「JSOI2016」扭動的回文串
觀察到一個性質之后直接二分+hash
LOJ2074「JSOI2016」燈塔
決策單調性優化貪心(甚至dp都不是,有點裸)
LOJ2077「JSOI2016」飛機調度
轉化成最小鏈覆蓋,網絡流解決
下午寫了兩道CF水題(AB),C看了題解。
week4(5.9~5.14)
5.9
晚上來學校vp了一場div1,寫了ABC
5.10
上午模擬賽
T1 有個結論是一棵樹上距離一個點最遠的點一定是直徑的一個端點,然后動態維護連通塊直徑
T2 發現排遍序之后貢獻就是凸函數了,並且上凸可以直接分治。
T3 線性代數,寄
下午開會,寫了CF1483的ABCD
這之后就是PKUSC了
week5(5.18~5.21)
5.18
今天的題有點毒瘤,姑且只訂正了一道
ZROI1869 匹配 考慮找出gcd個循環節,按輪廓線dp。具體的位運算有點麻煩
5.19
ZROI598 方格
二分答案+高超的dp技巧
ZROI599 凸包
求一堆點的子集的凸包大小的最大值,先把點按極角排序,再對邊排序,這樣dp轉移的時候一條合法的凸殼一定是能被表示成邊的上升序列的,反之則不行,那么枚舉起點直接dp(注意按掃描法的話要去掉點的順序在起點之前的邊)。
ZROI600 組合數學
這種憑空列一個奇奇怪怪的式子可以考慮組合意義
前面的可以枚舉\(a_1\)直接算,現在考慮求后面的。倒着看,相當於有 \(n\) 種顏色的球,每種 \(a_i\) 個,每次選一個,並且刪掉所有這種顏色的球,一共選 \(n-1\) 個。可以先枚舉哪個沒被選,求出它最后選(第n個)的概率,那么容斥一個集合 \(S\) ,它在 \(S\) 之前選的概率是 \(\frac{a_i}{a_i+\sum_{j\in S} a_j}\),和容斥系數一起用背包求就好了,就是獵人殺那題的套路。
5.20
ZROI506 字符串拼接
發現dp對2取模后永遠只有兩個位置是1,直接狀壓。
ZROI507 那個序列
字典序一般按位確定,需要一點高超的均攤check技巧。
ZROI508 那棵樹
每次修改一個顏色,求所有虛樹大小之和
發現虛樹大小就等於按dfs序相鄰兩個點距離和除以2,用set直接維護。
這之后就是APIO了
week6(5.24~5.28)
5.24
校內模擬了三道noip題,就不寫了
晚上div1,C寫假了,掉了5分。
5.25
補了昨天的C題
曼哈頓轉切比雪夫:
切比雪夫轉曼哈頓:
正睿模擬賽T1是原題,T2數據結構需要用到上面的技巧。
5.26
正睿模擬賽三道djq題,寫了兩個暴力有一個還掛了,成功墊底
下午vp了場div1
5.27
正睿模擬賽,都是數據結構板子題,切了個LCT(T2)
T1是可持久化fhq,不會
T3我寫了樹上莫隊但是卡不過去
5.28
學校模擬賽T1是簡單題壓個\(3^n\)狀態,T2是01trie合並+貪心
晚上CFdiv2,E看題解不是很難但沒想出來,可能對SA和插板不太熟悉
week7(5.31~6.4)
5.31
凌晨CFdiv1+div2,還剩一個半小時的時候先去寫D,結果假了,最后40分鍾想到E就是個插板,結束后20分鍾比較冷靜的時候才把細節想完寫出E,還好我手速夠快沒掉分。
學校模擬賽寫了200,實際80
T1 計算幾何,精度開的\(1e-5\)只有80,開\(1e-9\)就A了
T2 廣義SAM+線段樹合並,算空間的時候沒把SAM算進去,結果MLE了。以后記得線段樹合並開20N就行,最后算一遍總空間。
6.1
正睿模擬
T1送的
T2 求刪掉每個點的最小生成樹(權值取max)
想到在原最小生成樹上做這個問題就很簡單了
6.2
T1 構造排列的題可以從最值(最小/最大),相對順序等入手
T3 至少被一個元素滿足條件->容斥,賽時沒想清楚。優化可以減少狀態/dfs
AGC033C 刪葉子刪到空可以轉化成直徑減少
AGC014D 無言投下
ARC063F 矩形周長有一些性質
6.3
正睿三道不可做題,T1找了找規律,和題解大部分是一樣的,加了個數據分治過了。
vp了CF1525,寫了ABCDE
CF1525E 要求至少一個滿足條件,除了容斥還可以枚舉首個/最后出現的。如果枚舉的是最后出現的那么前面可以任意,后面都不能出現,分別統計。
6.4
上午學校模擬賽,T1是大字符集的AC自動機,用主席樹模擬轉移數組。
T2的題面/樣例有點問題,T3不會,也沒有題解。
晚上CFedu,同樣是5題,有人30多,有人200+(我),花了半個小時對拍結果是倍增變量寫錯了??
wee8(6.6~6.11)
6.6
晚上div2,每個題都WA過,最后20分鍾看了E但是沒想出來,rank700多
6.7
CF1439C 注意到一共只有log段,線段樹上二分暴力找
CF1439D 考慮最后的分配方案,連續段之間是不影響的,枚舉最后一段的長度然后dp。
CF1536E 降智題
6.8
正睿模擬 T1題意不明
T2要把樹上的一段權值往下移一位,移完是個小根堆,樹鏈剖分后注意到一段鏈最多只會改變兩個權值,一共 \(\log\) 段,就做完了。
T3討論下然后預處理一些東西的前綴和就能 \(n^2\) 了
看了看THUSC的題解,沒地方交。
CF1148G 巨大討論題
6.9
正睿T3 選一個權值和最大的點集使得在兩棵樹上都是連通塊
剛開始想的是把邊抽象成點跑最大權閉合子圖,結果不好賦權,而且可以選出多個聯通塊
后來想到直接枚舉一個點強制在連通塊里,其他點向父親連邊跑最大權閉合子圖就好了。
ARC068F dp
ARC078F 發現每次選一個團,直接狀壓。
6.10
ZROI509 發現答案最多只有100多位,枚舉最高位的1后發現對后面的不影響(至少有當前位數個2),那么再枚舉之前的一個答案判斷能否構成新答案即可。復雜度\(100^2\times 6000\)
ZROI510 分治
ZROI511 中位數有個套路,把小於它的賦為-1,大於它的賦為1,那么一條合法的路徑權值和為0,可以搞個dp。發現樹高\(\sqrt n\),那么直接暴力修改。注意隨機樹高數值上可能比 $\sqrt n $ 大,數組要開大一點。
6.11
學校模擬,考了套好題
T1 樹上選 \(K\) 條路徑權值和為 \(S\) ,得分為 \(\frac S{K+1}\) ,且你可以把所有點權加上一個 \([0,T]\) 的常數模 \(LIM\) ,最大化得分
分數規划+dp我還是會的,不過只有30分(甚至因為沒有spj爆零)
注意到加的常數可以分成n段,每段取最大的就只有n個,\(n^2\log n\) 就有60分了
正解是隨機化。我們把這n個要加的常數隨機排列,每次二分前 \(O(n)\) check 一下當前答案是否可行,復雜度 \(n^2+n\log ^2n\)(隨機排列每次找比當前元素值大的元素,期望次數 \(\log n\) )
T3 兩邊取對數之后轉化成找第一個在這個點上方的直線,整體二分+超哥樹是兩個 \(\log\) 的(偷懶寫法),改成斜率優化+歸並排序就是一個 \(\log\) 了
week9(6.18~6.20)
6.18
學校模擬 T1容斥+根號分治,其實這種插板法前不久在CF才自己做出過一道,場上腦子寄了
T2 統計不完整的鏈用斯特林數拆成組合數維護只能dp,轉化成統計完整的鏈+二項式定理拆出來用樹狀數組維護要好一點。
T3 申必結論
6.19
T1 發現按貪心策略對於每個點答案改變量是定值,那么上數據結構維護
T2 縮點之后跑dp,有點麻煩
T3 這類題(求最小數的 \(n\),使得前 \(n\) 個數中滿足某一性質的數的比例大於等於 \(p\) )通用解決方案:
假設現在考慮的是前 \(B\) 個數字,其中滿足性質的數的比例為 \(A\),並且滿足 \(\frac A B < p\),我們找到最小的 \(C\) 使得 \(\frac{A+C}{B+C} \ge p\),然后把 \(C\) 加到 \(B\) 上去,重新計算 \(A\) ,迭代這個過程,直到 \(\frac A B \ge p\),\(B\) 即為答案。
復雜度我暫且蒙在古里,這題好像很快,主要看這個性質咋樣吧。
week10(6.22~
來金華一中了
6.22
ZROI604 按位確定+模擬
ZROI605 按位確定+猜結論
6.23
ZROI537 貪心題 申必最小割
下午模擬賽 T1 發現一個格點只有兩種選擇,於是最小割
T2 構造題,各種亂搞
T3 場上寫的 \(m2^{\frac n 2}\) 討論+fwt+容斥竟然過了,正解還要再加個枚舉,復雜度\(m2^{\frac n 3}\)
6.24
學習了一下待修莫隊(三維莫隊),把塊長開成 \(n^\frac 2 3\) 就好了
the end
后面都在正睿了 教練也不催我交總結 懶得寫了
