1. 程式人生 > >退役前的做題計劃1.0

退役前的做題計劃1.0

二維 檢測 lca 決策單調 相差 最長路 旅行 相同 iss

租酥雨最近很懶qwq,具體表現在寫題的時候不想發題解了。
但是想想這樣也不太好,就決定發個一句話(半句話到幾句話不等)題解上來。

2018-09.18-2018-09.28

[BZOJ3613][HEOI2014]南園滿地堆輕絮

可以證明答案就是差最大的逆序對的差的一半。

[BZOJ3612][HEOI2014]平衡

相當於是要選k個不同的數使它們和為0.正負分開,設\(f_{i,j}\)表示選\(i\)個數和為\(j\)的方案數,轉移是\(f_{i,j}=f_{i,j-i}+f_{i-1,j-i}-f_{i-1,j-n-1}\),分別是給每個數加1,給每個數加1再插入一個1,以及不能讓最大值超過n。算答案就枚舉正負分別選多少然後背包卷一下,註意可以選一個0.

[BZOJ4007][JLOI2015]戰爭調度

直接爆搜每個點選取方案,復雜度是\(T(n)=2T(n-1)=2^n\).再做一個樹上背包就好了。

[BZOJ5330][SDOI2018]反回文串

莫比烏斯反演+Pollard_Rho分解質因數,已經寫了詳細題解,此處不再贅述。

[BZOJ4850][JSOI2016]燈塔

這不是POI的原題嗎?決策單調性瞎搞。

[BZOJ4857][JSOI2016]反質數序列

兩個數加起來是質數就連一條邊,相當於是要求最大獨立集,如果只有不超過一個1的話原圖一定是二分圖(按奇偶),而超過一個1是沒有意義的(1不能重復選),所以就直接dinic了。

[BZOJ4851][JSOI2016]位運算

從高位往低位一位位確定。假設選出的n個數按大小排列,我們用一個長為n的二進制數來表示當前每個數和下一個是否相同,最後一個數和R是否相同。發現每個0跟每個1的轉移都是一樣的,所以可以直接矩陣快速冪,復雜度\(O(2^{3n}(|S|+\log k))\)

[BZOJ4475][JSOI2015]子集選取

每個數都是獨立的,答案一定是\(w^n\)的形式。觀察發現答案就是\(2^{nk}\),可以列出遞推式然後歸納證明。

[BZOJ4484][JSOI2015]最小表示

按拓撲逆序處理,按照一定順序訪問出邊,用bitset存可到達的點,如果某條出邊的加入並沒有使可到達的點增多,那麽這條邊就可以刪除。訪問順序按照最長路的順序。

[BZOJ4472][JSOI2015]salesman

直接樹dp+貪心即可。註意如果選了某個子樹的權值為0那麽也說明不唯一(可以不選)

[BZOJ4476][JSOI2015]送禮物

有兩種情況,一種對所有長度為L的區間求答案,另一種情況,區間的兩端點一定分別是最大值跟最小值。分數規劃後推一下式子,相當於是要最大化前面的\(a_i-mid\times i\),用單調隊列維護。

[BZOJ4477][JSOI2015]字符串樹

對字符串建Trie樹,有多少串包含這個前綴相當於是有多少包含在Trie樹上這個節點的子樹裏。主席樹維護到根路徑上的信息,每次查詢減一下lca。

[BZOJ4488][JSOI2015]最大公約數

枚舉起點,\(\gcd\)往後走至多只會變化\(\log\)次,所以暴力二分找到最遠點更新答案就行了,gcd用\(ST\)表求,復雜度兩只\(\log\)

[BZOJ4481][JSOI2015]非誠勿擾

假設某個女嘉賓的如意郎君有\(x\)個人,那麽選到第\(i\)個人的概率就是\(\frac{p(1-p)^{i-1}}{1-(1-p)^x}\),二維偏序即可。

[BZOJ4482][JSOI2015]套娃

貪心,按照美觀度依次選取最大的能放進去的放。

[BZOJ2743][HEOI2012]采花

離線詢問,考慮每種顏色對答案的貢獻,用樹狀數組維護。

[BZOJ4029][HEOI2015]定價

從後往前貪心放0.註意特判L和R位數不相同的情況。

[BZOJ4028][HEOI2015]公約數序列

分塊,對每個塊維護塊內\(\gcd\),塊內異或和,以及一個塊內元素按照塊內異或前綴和的排序數組,修改直接重構快,查詢分兩種,如果塊內的前綴\(\gcd\)都相同就在排序數組上二分,否則暴力,因為會使得前綴\(\gcd\)改變的塊至多只有\(\log\)個,所以復雜度\(O(n\sqrt n)\)

[BZOJ2746][HEOI2012]旅行問題

建出\(fail\)樹就是兩點\(lca\)

[BZOJ2745][HEOI2012]bridge

\(A=m(m-1),B=(m-1)(m-2)+1\),題目就是在求\(A2^m\sum_{i=1}^{n}B^{i-1}i^m\)\(m\)較小\(p\)較大可以接受\(m^3\)的矩乘,主要在於用楊輝三角構造\(i^m\)\(p\)較小可以求出循環節然後倍增(因為肯可能不存在逆元不能等比數列求和)

[BZOJ2067][POI2004]SZN

第一問答案恒定,非根節點貢獻兒子個數/2向下取整,根貢獻兒子個數/2向上取整。第二問先二分再貪心匹配,匹配時還要二分父向邊和哪個兒子匹配,細節較多。

[BZOJ3872][POI2014]Ant colony

對每個點求:如果這個點到達根後數量為K則到這個點的螞蟻數量的範圍是多少,乘爆了可以直接設成inf,對於每個葉子節點二分即可。

[BZOJ3745][COCI2015]Norma

分治,每次考慮跨越mid的區間。i從mid循環到l枚舉左端點,記左邊的最大最小值為mx和mn,右邊用單調指針維護最後一個小於等於mx的位置j和大於等於mn的位置k。右端點<=min(j,k)直接等差數列求和,>max(j,k)就是右邊最大最小值乘積的後綴和,中間依照jk的相對大小可能是最小值或是最大值的區間和。維護六個東西:最小值、最大值、最大值乘最小值以及分別乘下標的前綴和即可。

[BZOJ5281][Usaco2018 Open]Talent Show

分數規劃之後做遍背包,\(w_i\)超過\(W\)的直接當做是\(W\)

[CF912E]Prime Gift

折半搜出所有不超過\(10^{18}\)滿足條件的數然後二分求答案。

[CF875D]High Cry

維護每個數向左向右第一個不是自己子集的數的位置,從大到小分治做就行了。

[51nod1472]取余最大值

找區間最大值,暴力for小的一半,每次相當於是查詢區間\([l,r]\)內等於\(v\)的有多少個。離線下來可以做到一個\(\log\)

[51nod1348]乘積之和

分治\(FFT\)板子。精度貌似有點炸要\(MTT\)才行。

[51nod1752]哈希統計

倍增+循環卷積。

[BZOJ4861][Beijing2017]魔法咒語

\(l\)較小可以\(O(nl)\)dp,轉移串長度小可以直接矩乘,矩陣大小為二倍AC自動機節點個數的平方。

[BZOJ4722]由乃

可以證明區間長度大於等於14一定有解,否則就\(meet\ in\ the\ middle\)一下\(O(3^7)\)爆搜。

[BZOJ4347][POI2016]Nim z utrudnieniem

\(f_{i,j,k}\)表示前\(i\)堆裏丟掉的堆數模\(d\)\(j\),異或和為\(k\)的方案數。因為\(\sum a_i\)不是很大,所以每次枚舉\(k\)就最大只枚舉到\(a_i\)的最高位那麽多,復雜度是\(O(\sum a_id)\)的。轉移的時候異或的兩個數可以一起轉移,就不會卡空間了。

[BZOJ4345][POI2016]Korale

堆模擬搜索。先求出答案,然後找字典序最小,因為有了答案的限制,所以可以爆搜,狀態數不會超過\(k\)

[BZOJ3191][JLOI2013]卡牌遊戲

\(f_{i,j}\)表示剩下\(i\)個人時第\(j\)個人活的概率,隨便轉移一下就好了。

[BZOJ3192][JLOI2013]刪除物品

傻題不講了。

[BZOJ3190][JLOI2013]賽車

維護一個第一象限的凸殼。

[BZOJ3193][JLOI2013]地形生成

組合計數,按高度從高到低考慮即可。

[BZOJ3990][SDOI2015]排序

可以發現交換順序是沒有關系的,所以每種本質不同的方案就給答案貢獻次數的階乘。從小往大的交換每次至多\(4\)中決策,復雜度\(O(4^n)\)

[BZOJ4600][SDOI2016]硬幣遊戲

暴力預處理\(SG\)函數就行了。

[BZOJ3131][SDOI2013]淘金

首先\(x,y\)坐標獨立者很顯然,然後因為個位數字含有的質因子只有\(2,3,5,7\),所以最後有金子的位置一定只含有這四個質因子,而在\(10^{18}\)內這樣的數不多,所以直接數位\(dp\)一下記下狀態。前\(k\)大就固定\(x\)坐標,用堆維護即可。

[CF981F]Round Marriage

hall定理。需要倍長後再加倍才能保證整個環都匹配上了。

[BZOJ1283]序列

線性規劃網絡流。

[LOJ6079][2017 山東一輪集訓 Day7]養貓

上一題的加強版。課件裏面講了。

[CJOJ1851]免費航班

邊雙縮點然後樹上換根\(dp\)求最長路。

[51nod1443]路徑和樹

建出最短路徑\(DAG\)後跑個最小樹形圖,因為是個\(DAG\)所以直接給每個點選最小入邊即可。

[UOJ67]新年的毒瘤

度數為\(m-n+2\)的非割點即為答案。

[BZOJ4883][Lydsy1705月賽]棋盤上的守衛

可以說是“最小生成基環森林”?總之是要保證每條邊可以匹配每個點,所以一個連通塊肯定是一個基環樹。

[CF1053B]Vasya and Good Sequences

需要滿足的條件是最大值不超過總和的一半且共含有偶數個1。因為最大值不超過60所以不滿足前一個條件的區間長度不會超過60,暴力減掉即可。

[CF1053C]Putting Boxes Together

推一下式子,拿兩個樹狀數組分別維護區間\(w_i\)之和以及\(w_i\times i\)之和。

[BZOJ3887][Usaco2015 Jan]Grass Cownoisseur

先scc縮點,之後在正反\(DAG\)上跑出從\(1\)出發的最長路,枚舉哪一條邊翻轉即可。

[BZOJ1731][Usaco2005 dec]Layout 排隊布局

差分約束。註意圖可能不連通。

[BZOJ5185][Usaco2018 Jan]Lifeguards

先去掉被包含的區間,然後貪心\(dp\),轉移分兩種,一種是不選當前區間,一種是選,如果這個選的區間要和上一個選的有交那麽一定會選一個左端點盡量靠左的。

[BZOJ5190][Usaco2018 Jan]Stamp Painting

合法的方案就是存在一個長為\(k\)的顏色連續段,考慮計算不合法的,\(f_i=i^m(i<k),f_i=(m-1)\sum_{j=1}^{k-1}f_{i-j}\)

[BZOJ1701][Usaco2007 Jan]Cow School牛學校

假設前\(t\)大的分數的分子之和為\(U\),分母之和為\(D\),則若要滿足條件則需要存在\(i,j\)滿足\(\frac{U-u_i+u_j}{D-d_i+d_j}>\frac UD\),其中\(i\)是前\(t\)大之一而\(j\)不是。劃一下式子發現是要求\(Du_i-Ud_i\)的前綴\(\min\)\(Du_j-Ud_j\)的後綴\(\max\),Claris老師說滿足決策單調性。

[BZOJ5071][Lydsy1710月賽]小A的數字

發現操作的本質是交換兩個前綴和,所以就判一下兩個序列的前綴和是不是全等就好了。

[BZOJ5072][Lydsy1710月賽]小A的樹

對於一個固定的\(x\)它合法的\(y\)一定是連續的,所以只要算出最大值跟最小值就可以了。

[BZOJ5094][Lydsy1711月賽]硬盤檢測

用對數計算\(n\)在每個取值下當前這種情況出現的概率,取最大的即可。

[BZOJ5091][Lydsy1711月賽]摘蘋果

發現不管怎麽說,移動到每個點的概率都是\(\frac {d_i}{2m}\)

[BZOJ5090][Lydsy1711月賽]組題

分數規劃,記錄個方案輸出時再轉分數即可。

[BZOJ5074][Lydsy1710月賽]小B的數字

實際上就是給你一組\(a_i\)要你構造一組\(k_i\)使得任意\(i\)滿足\(k_ia_i\ge \sum_j k_j\)。一個結論是\(\sum_i \frac 1{a_i}\le 1\)是可以構造出,否則不行。

[BZOJ5075][Lydsy1710月賽]小B的矩陣

答案肯定唯一。先考慮只有一列的情況,相當於已知每個格子及其相鄰至多兩個格子的雷數,可以按\(n\)\(3\)的余數分三類討論。列數不為一就先求出每行及其上下兩行一共有多少雷,轉化為只有一列的問題。

[BZOJ4921][Lydsy1706月賽]互質序列

前綴後綴\(\gcd\)只會變化至多\(\log\)次,所以就暴力\(\log^2\)搞一搞好了。

[BZOJ4922][Lydsy1706月賽]Karp-de-Chant Number

每個括號序列消完後一定是一段前綴右括號跟一段後綴左括號。可以理解為:你要接受當前這個括號序列作為下一個串,就要先付出前綴右括號數量的左括號,然後可以得到所有的後綴左括號。按左括號總量是增多還是減少分兩類,對於左括號增多的,肯定是優先選前綴右括號數量少的,而對於左括號減少的,你倒過來看就是右括號增加,所以是優選後綴左括號數量多的。排完序後大力做個\(O(n^3)\)背包即可。

[BZOJ4923][Lydsy1706月賽]K小值查詢

考慮用平衡樹維護序列。每一個修改對於\([1,k)\)的數沒有影響,對於\((2k,+\infty]\)的數在全局的相對大小也沒有影響,打標記即可。需要修改的數是\([k,2k]\),把這段區間摳出來暴力改。發現這樣一來每個數至多被暴力修改\(\log\)次,所以復雜度就對了。

[BZOJ4891][TJOI2017]龍舟

(洛谷上數據範圍是假的,這個題明明就是\(2\times 10^{18}\))把\(M\)質因數分解,然後分子分母也一一分解,如果約分後分母與\(M\)\(\gcd\)不為\(1\)則無解,對\(M\)算一下\(\varphi(M)\)直接算逆元即可。

[BZOJ4890][TJOI2017]城市

暴力\(O(n^2)\)換根\(dp\)就過了...

[BZOJ4888][TJOI2017]異或和

考慮每一位是不是\(1\)。首先對序列做前綴和,根據這個數在當前這位是\(1\)還是\(0\)可以確定另一個前綴的取值範圍,樹狀數組維護即可。

[Luogu4471][BJWC2018]詞韻

對反串建\(Trie\),每個點可以接他的父親/兒子/兄弟,跑個樹\(dp\)

[Luogu4577][FJOI2018]領導集團問題

線段樹合並。

[BZOJ3864]Hero meet devil

(為了做下面那道題跑去寫的)\(dp\)\(dp\)。考慮求\(lcs\)的數組\(f_{i,j}\),其相鄰兩位的相差不會超過\(1\),所以差分一下就可以用一個二進制串表示一個\(lcs\)的匹配狀態。復雜度\(O(n2^m\times4)\)

[BZOJ5336][TJOI2018]遊園會

和上面那題一樣,再多開一維狀態記串\(NOI\)的匹配狀態。

[BZOJ5337][TJOI2018]堿基序列

\(hash\)之後簡單\(dp\)即可。

[BZOJ5298][CQOI2018]交錯序列

考慮\(x^ay^b=(n-y)^ay^b=\sum_{i=0}^a\binom{n}{i}(-1)^{a-i}y^{a+b-i}\)。所以只要能求出\(y\)的若幹次冪就行了。矩乘即可,矩陣大小為\(2(a+b+1)\),較卡常,需要盡量減少取模次數。

[UOJ62] 【UR #5】怎樣跑得更快

其實連\(\sum_{j=1}^nf(\gcd(i,j))\times g(i)\times h(j)\times x_j=b_i\)都可做呢。

講道理做三次反演就好了,中間要判一下無解的情況(除零)

[CF809D]Hitchhiking in the Baltic States

考慮經典的\(lcs\)求法,設\(f_i\)表示長度為\(i\)最後一個元素的最小值。

對於一個\([L,R]\),找到最後一個小於\(L\)的位置\(p\),那麽\(f_{p+1}\)可以被更新為\(L\)\(f_{p+2}\)被更新為\(f_{p+1}+1\),直到最後一個小於等於\(R\)的位置\(q\)

相當於是區間平移,用平衡樹維護即可。

[BZOJ3073][Pa2011]Journeys

線段樹優化連邊,需要建兩棵線段樹,一棵入邊一棵出邊。\(01\)最短路可以做到線性復雜度。

[Wannafly挑戰賽21E]未來城市規劃

維護邊權\(\times sz_i\)以及邊權\(\times sz_i^2\)的區間和即可。

[BZOJ4598][SDOI2016]模式字符串

\(O(n\log n)\)點分治。據說長鏈剖分可以做\(O(n)\),然而我並不會\(O(1)\)繼承長兒子啊怎麽辦。。。dalao們教教我吧

[BZOJ4599][SDOI2016]墻上的句子

網絡流,最小割建圖。

[BZOJ4517][SDOI2016]排列計數

\(m\)個不動,剩下的錯排。

[BZOJ4602][SDOI2016]齒輪

分解質因數然後\(dfs\)

退役前的做題計劃1.0