暑假訓練idea彙總

        AFO時間過長致使看什麼都以爲新鮮……暑假訓練主要就是打一打hdu和nowcoder的多校,題目沒什麼好保密的。由於沒有部分分可能並不適合學弟學妹們練習,不過有些idea仍是頗有意思的,看成課餘消遣大約不錯。思惟能力很強的oier想必頭腦中都有不少妙不可言的模型吧?沒有用公式題解果真不美觀qwqphp

 

 

7.22  算法

CF1189  A1  Add on a Tree編程

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

要題解:度爲 2 的點所連的兩邊必須相同,因此判度數便可。對於其餘狀況都可在子樹中調整,充分性一樣可證。bash

 

CF1189  A2 Add on a Tree:Revolutionide

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

簡要題解:按照 dfs 序構造,關鍵在於怎樣消除上面操做對已經完成部分的影響。將一個葉子節點設爲根,其餘葉子節點直接向根連要求權值的邊。對於非葉子節點,選取子樹中兩個葉子之間連(出權-入權)/2,再由兩個葉子分別向根連邊,便可知足當前要求而且不破壞以前構造。過程當中出現了小數或上一題中矛盾即爲無解,算法題每每把一個總體問題「分步處理」,儘量消除後效性才能夠獲得滿意的複雜度。idea

 

 

7.25  2019牛客多校3spa

G Removing Stonescode

簡要題意:有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個元素,可是要求的初始內存較大。可使用鄰接表,達到空間線性。

相關文章
相關標籤/搜索