暑假訓練idea匯總


        AFO時間過長導致看什么都覺得新鮮……暑假訓練主要就是打一打hdu和nowcoder的多校,題目沒什么好保密的。因為沒有部分分可能並不適合學弟學妹們練習,不過有些idea還是很有意思的,當作課余消遣大約不錯。思維能力很強的oier想必頭腦中都有很多妙趣橫生的模型吧?沒有用公式題解果然不美觀qwq

 

 

7.22  

CF1189  A1  Add on a Tree

簡要題意:給定一棵樹,每次選兩個葉子,給它們之間的路徑上的邊加任意實數權。現在假設這棵樹每個邊都有一個隨機邊權,問按上述規則是否存在構造方案。要求線性復雜度。

要題解:度為 2 的點所連的兩邊必須相同,所以判度數即可。對於其他情況均可在子樹中調整,充分性同樣可證。

 

CF1189  A2 Add on a Tree:Revolution

簡要題意:把前一題中的實數權改為正整數,規定每條邊的邊權,給出一個構造方案。要求線性復雜度。

簡要題解:按照 dfs 序構造,關鍵在於怎樣消除上面操作對已經完成部分的影響。將一個葉子節點設為根,其他葉子節點直接向根連要求權值的邊。對於非葉子節點,選取子樹中兩個葉子之間連(出權-入權)/2,再由兩個葉子分別向根連邊,即可滿足當前要求並且不破壞之前構造。過程中出現了小數或上一題中矛盾即為無解,算法題往往把一個整體問題“分步處理”,盡可能消除后效性才可以得到滿意的復雜度。

 

 

7.25  2019牛客多校3

G Removing Stones

簡要題意:有n堆石子,每個堆有ai個,每次取石子要從兩個不同堆各取一個,問有多少區間可以按這個規則取完所有石子,n<=3e5。

簡要題解:可以看出題目要求等價於 sum>=2*max,找出區間中最大值,從短的一側枚舉端點,在另一側二分更新答案,然后從最大值兩側向下分治。每一次枚舉的端點數不超過 1/2,這一步復雜度上限為 log,總復雜度nlog^2。

 

 

7.27  2019牛客多校4

I .string

簡要題意:求有多少本質不同的子串,但是a與rev(a)只統計一遍,要求線性復雜度。 

簡要題解:用后綴自動機可以求本質不同子串個數,一個非回文子串在 s 和 rev(s)中會被記錄兩次,但是回文串只有一次。所以正反串中本質不同子串個數 p+回文子串個數 q,每個串都被記錄兩遍,/2 即得到答案。注意把反串加入后綴自動機時要和正串分隔開,中間分隔符對答案的影響要消除。

 

D .triples I

簡要題意:求至少多少3的倍數可以或運算得到給定的數s,輸出方案。

簡要題解:從表面上觀察 01 的形態並不是有效的方法,想到一個二進制位模 3 非 1 即 2, 可以根據給出數字模 3 的余數和中間某些位模 3 的余數來構造合法解,最多只會用到兩個數。

 

 

7.29  2019HDU多校3

09   6611   K Subsequence  

簡要題意:一個長為n的序列ai,每次取一個不下降子序列,取k次。每個元素不能被重復選取,問選取元素的和最大是多少。n<=2000,k<=10.

簡要題解:可以利用費用流,對源點和序列中每一個點拆點限制流量,源點的出點向每個點入點連邊,每個點出點向匯點連邊。暴力建圖中由 i 的出點向后方所有權值更大的入點連邊,為了優化建邊給每個點拆出的兩點之間增加一個費用為 0 流量為 inf,則一個不減的序列可以自然連接,需要再建的只有權值比之前連過的點都小、但不小於 i 的點。

 

 

8.1  2019牛客多校5

E.independent set 1

簡要題意:N 個點的圖,求每一個導出子圖的最大獨立集,n<=26。

簡要題解:狀壓DP,將每個點相連的點也用二進制表示。去掉最高位的1來轉移, f[i]=max(f[ibin[j]],f[(i-bin[j])&(~e[j])]+1)。時間空間復雜度都是 2^n,用 1 字節的 char 來壓內存。

 

F.maximum clique 1

簡要題意: N 個點的圖,每兩個權值至少有兩個二進制位不同的點之間有邊,求最大團並輸出方案, n<=5000。

簡要題解:最大團等於補圖的最大獨立集,二分圖最大獨立集=總點數-最小點覆蓋。本題中補圖有邊相連的條件是只有一個二進制位不同,則同一點連向的兩個點一定有兩個二進制位不同,不會有邊相連,染色后就可轉化為二分圖。

輸出最大獨立集的方案是這道題的亮點。要在匈牙利算法結束后選擇左側未匹配點重復嘗試匹配,因為圖中已不存在增廣路,嘗試一定會失敗於一條匹配邊,並且是未匹配-匹配邊交錯。標記這 個過程中遇到的點,選取左側有標記的點和右側無標記的點即為最大獨立集,其余點為最小點覆蓋。

 

 

8.3  2019牛客多校6

I.Can They Go to Galar?

簡要題意:給出一個仙人掌,1號點有精靈,邊有邊權 p。一個已有精靈的點有 p 的概率使與它相連的點出現精靈,問最后期望精靈數。

簡要題解:用圓方樹處理仙人掌是常規操作,但是因為很久沒寫過圓方樹,開這道題的時間也非常晚,沒能 AC。從 1 開始 dfs,一個環中一定有一個點先被到達,稱之為起 點,那么從起點到達這個環中的其他點的概率為 1-(1-左側到達概率 p)*(1右側到達概率 q)。 由於建樹時按 dfs 序求點雙,一個方點連接周圍圓點的順序也是 dfs 序,按順序取出圓點最后一個恰是起點,故概率 p 和 q 可以用前綴/后綴積快速計算。被到達的概率*起點答案即為環中每個點答案,對於非環中點直接用起點*邊權求解。

 

 

8.5  2019HDU多校5

2. 6625 three arrays
簡要題意:給出兩個數組 a、b,c[i]=a[i]^b[i],可隨意調整 a、b 中數字順序,求字典序最小的 c 數組。

簡要題解:本題容易聯想到 trie 樹,但如果沒有一些必要結論,貪心的正確性很難憑空理解。

       我們把 a[i]在 b 數組剩余所有數中和 b[j]異或最小稱作a[i]選擇 b[j],那么 a[i]b[j]若互相選擇則一定為最優解。a[i]選擇 b[j],而 b[j]選擇a[k]體現了不等關系 a[k]^b[j]<a[i]^b[j]。若不斷地尋找最優,結尾一定是兩個數相互選擇——因為數字個數有限必定出環,環的大小不等於 2 則可沿不等關系推出 a[i]^b[j]>a[i]^b[j] 的矛盾。按照這種思路模擬,復雜度為 nlogv,trie 樹中查找最優復雜度為 logv, 每次查找或者出環消除兩個點,或者在隊列中新加一個點,次數都為 N。     

       但是貪心的編程復雜度遠低於上述解法,只需要每次在 trie 樹中找盡量近的兩點並刪去。我們假設在 trie 樹中找到了最近的 a[i]、 b[j],若 a[i]沒有選擇 b[j], 說明有更近的 b[k],與最近矛盾;同理 b[j]也會選擇 a[i]。因為在 trie 樹中找的是每個分支最近的兩個葉子,而不是像上一個算法一樣固定一個去找另一個,所以它們一定互相選擇。在每個值最小后只需要排序就能得到最小字典序,僅僅憑這個輸出要求就推斷逐個確定的思路是不可取的。

 

 

8.7  

G.  What Goes Up Must Come Down

簡要題意:要把一個長度<=10^5 的序列通過 swap 調整為先單調不減再單調不增,問最小操作次數。

簡要題解:我們可以先考慮最小的一個數,因為任何其他數都不會越過它到達兩端。直接看這個數到哪一端逆序對數較小並選擇,因為這是最小數它並不會影響其他數的逆序對數。把最小數移到一端之后就變成了一個子問題,繼續取第二小數即可。對於這個算法來說相等的數沒有影響,先取任意一個都是一樣的。

 

 

 

 8.8  2019牛客多校7

B. Irreducible Polunomial

簡要題意:給出一個 n 次多項式的系數,判斷它是否能在實數域內因式分解。

簡要題解:一個 n 次多項式有 n 個復數根,兩兩成對,任取一對相乘即可得到一個實數因式,因此三次及以上一定可以因式分解,而一次及以下一定不可以。二次能否因式分解要看德爾塔,若 b^2<4ac 則不能因式分解。

 

F. Energy stones

簡要題意:有 N 個石頭,每個初值為 ei,每秒增加 li,最高到達 ci。有 M 次詢問,每次獲得 ti 時間后一個區間[li,ri]的值之和,並且將這個區間的值置為 0,問所有詢問獲得的價值之和,n,m<=1e5。

簡要題解:注意到我們關注的是相鄰兩次詢問的時間差,那么一次詢問可以看成一個差分, 在 li 加入此次詢問,再在 ri+1 刪除。用一個 set 維護當前詢問,再用樹狀數組維護相鄰兩詢問的差。每塊石頭對答案的貢獻可以分成前后兩部分,即已經長到 ci 和還未長到 ci 的詢問差數,已經長到就用個數*ci,還未長到就用時間*li。注意第一次詢問要特殊處理,考慮 ei 的貢獻。

 

 

8.10  2019牛客多校8

A.All-one Matrices

簡要題意:給出一個長寬不超過3000的01矩陣,問最大全1矩形數。最大矩形即不被其他矩形包含的矩形。

簡要題解:預處理每個點向上延伸的連續1的個數和、向左延伸的l,然后掃每個點,對每一行h維護一個單調遞增的單調棧,每個棧中元素記錄向左延伸長度。當我們彈棧說明右側有一個不大於它的數,若這個數比它小,左、右、上三方都不能再延伸,只要用l判斷一下下方也不可延伸就可以貢獻答案了。

 

 

I. Inner World

簡要題意:開始有n棵只有1個點的樹,m個連邊操作,在區間[l.r]的u端點下連上v,保證v各不相同。之后有q個詢問,每次問區間[l,r]的x點子樹大小之和,n、m、q<=3e5。

簡要題解:因為v各不相同,我們可以建一棵樹,記錄每個點出現的區間。以dfs序為x坐標,出現區間為y坐標,每次詢問相當於詢問一個矩形的值。我們建一個大小為n的線段樹,依次掃描dfs序上每個點,把它出現的區間+1。離線詢問,一個詢問可以化為點x的dfs序中out處[l,r]-in-1處[l.r]的值。

 

 

8.14  2019HDU多校8

8.  6664  Andy and Maze

簡要題意:給一張n個點的圖,求長度為k的點不重復最長路,n<=1e4,2<=k<=6。

簡要題解:正解用了一個有趣的隨機化思想。隨機給點染上k種顏色,容易用狀壓dp求得包含k種顏色的最長路。如何保證原圖中最長路上的k個點恰好被染成不同顏色呢?多隨機幾次,每次正確的概率為k!/k^k,因為k很小,時間可以承受。

 

9.  6665  Calabash and Landlord

簡要題意:給出兩個邊與坐標軸平行的矩形,問它們把平面分成幾部分。

簡要題解:離散化之后並查集。

 

 

8.15  2019牛客多校9

J.Symmetrical Painting

簡要題意:一個白色平面內有n個黑色矩形,現在將任意部分染成白色,使余下黑色部分有一條與x軸平行的對稱軸,求黑色部分最大面積。n<=3e5.

簡要題解:將y坐標全部乘2,面積問題就變成了距離問題。

       先證明最后答案一定為一個現有矩形的對稱軸:將對稱軸向上平移,一部分矩形對答案貢獻變大,一部分變小;貢獻由變大到變小當且僅當總體對稱軸穿過該矩形對稱軸時,所以最佳決策點一定在某個矩形對稱軸處。

        之后做法比較簡單,從下到上移動對稱軸,預處理每個矩形開始貢獻答案、對答案貢獻由變大到變小、結束貢獻答案的對稱軸。對於每個對稱軸,未變化的矩形對答案的貢獻可以直接計算,發生變化的分別處理。每個矩形最多被特殊處理3次,時間復雜度為線性。

        注意vector里雖然只有3n個元素,但是要求的初始內存較大。可以使用鄰接表,達到空間線性。

 

 


免責聲明!

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



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