论逗逼的自我修养——BZOJ第一页计划
感覺都干了這么久BZOJ了,還沒有上第一頁有點對不起我的300塊大洋,打算在WC前淦上第一頁。
upd 1. 2 : 以奇怪的姿勢做完了cerc2014感覺感覺做了3天做了沒幾道不太水的題,今天又以刷完cerc2014的理由水了一波傻逼題也是挺愉♂悅的。
upd 1.14 : 感覺刷水絲毫沒有前途。。。這個就慢慢補吧。。。下學期前我肯定會做好的。
upd 2.23 : 劃了波水就上了。
現在都淦了65個題了
【BZOJ3631】 看著n挺大,我們考慮使用差分,然后維護下子樹和。
【BZOJ2780】 AC自動機可以直接秒,其實我是想到SAM也能做。建個多串SAM,然后就變成子樹的顏色數,離線搞一搞就可以了。
【BZOJ3165】 直接暴力線段樹,然后暴力維護點標號,這樣的復雜度是nlognlogn的。
【BZOJ3240】 爆算式子,可以發現就是幾個求和,擼一擼就好了。
【BZOJ1172】 發現每個數有用的只是gcd(x, k)的值,而且k的約數很小,那么考慮直接dp它們的gcd(..., k)的值就可以了。
【BZOJ3172】 AC自動機。
【BZOJ3170】 經典題。
【BZOJ3210】 同3170.
【BZOJ1071】 我們考慮(min_s, min_h)對應的一個集合S,那么(min_s, min_h+1)對應的集合不過是S上加一些值再減掉min_h的點,那么考慮直接枚舉min_s, min_h然后單調維護就可以了。
【BZOJ1041】 很容易知道\(2r=d(a^{2}+b^{2})\),其中\(d=gcd(r+x, r-x)\), \(r+x=da^{2}\), \(r-x=db^{2}\),我們枚舉d,然后再枚舉a就可以了,注意到如果對于合法的a, b如果交換他們的值對應的x, y是不變的,那么就將a枚舉的值縮一半就可以了,最后乘4加4就可以了。
【BZOJ1019】 令\(f_{i,j}表示把i個盤子在j個柱子上的移到g_{i,j}上的步數\),然后類似hanoi的遞推就能做了。
【BZOJ3000】 用stirling公式化一化,小數據暴力,大數據近似就可以了。
【BZOJ4048】 考慮一個區間在[l,r]內,那么我對于包含在內的一個最大長度一定要搞,那么我們就可以這樣dp。令\(dp_{l,r}\)表示在\([l,r]\)中的最小代價,因為一定要羅掉那個最大長度,我們就可以直接暴力合并了。
【BZOJ3928】 同4048,雙倍經驗。
【BZOJ4050】 暴力。
【BZOJ4047】 一開始看錯題了,囧。。。考慮直接\(dp_{i,j}\)表示到第i個物品被開了j個消失,這樣羅一羅就好了。
【BZOJ4042】 這題讓我想到了個多校題,那個做法是\(nlogn\)的,區別僅在不共邊和不共點上,不共邊的話我們可以考慮在每個邊上多造一個點,然后每個path兩端都往里縮一格就可以了。學習了下其他的姿勢覺得很厲害啊,令\(dp_{u}\)為u子樹的最大值,再搞出子樹中每個點多余的匹配位置,在u上可以用集合dp做。
【BZOJ4347】 dp下余數和異或值就可以了。
【BZOJ4325】 noip時候寫炸了,感覺這個在uoj上也能被卡掉,并不知道為什么沒人卡。
【BZOJ4045】 保持比例暴力就可以了。
【BZOJ4044】 顯然肯定要搞一個回文其他直接添加,那么就是搞出所有回文的構造最小步驟數。考慮用回文樹就能夠快速搞咯。
【BZOJ4043】 顯然的我們發現如果第i-1位的關系方案數給弄出來那么第i位就能搞出來,然后我不會討論就想了另一種方法。令\(dp_{i,j}\)表示前i位組成了第j中關系,那么我們再遞推一個\(trans_{a,b,c1,c2,c3}\)第a種關系擼到第b種當前的值是c1,c2,c3的轉移方案數,這樣就可以做了。
【BZOJ4387】 可以分治一維然后考慮合并兩個塊,那么就是two pointer掃一掃就可以了。
【BZOJ4378】 令不小于s的數個數為cnt個,小于s的和為sum,那么如果\(sum>=(c-cnt)*s\)那么就可以了,否則就爆了,這樣弄一個線段樹搞一搞就可以了。
【BZOJ4049】 這道題好像類似的做過?線段樹上套凸包二分下就好了。
【BZOJ4046】 考慮從大到小做生成樹,每次我們扔一個邊進去就有邊會出來,由于需要在線維護,就可以使用可持久化線段樹維護當前邊集。
【BZOJ1072】 dp下余數和數集就可以了。
【BZOJ1060】 搞出一個最大鏈,然后貪心亂搞一發就好了。
【BZOJ1067】 分類討論,用線段樹什么維護維護。
【BZOJ1068】 dp維護最右邊的M的位置就可以了。
【BZOJ1085】 因為有上界,所以用迭代dfs+啟發式函數優化。
【BZOJ1086】 塊狀樹的構造。dfs一下,維護不管前面剩余與下面的搞一搞構成塊,剩余的和上面合并一下,這個用dfs很容易自底向上維護。
【BZOJ4385】 單調隊列做一做。
【BZOJ4377】 弄了很久,可以搞出一開始一個可能合法的區間然后對它+a到下一個區間然后搞出這些可取不可取的區間,做一個不可取的并減一減,然后特判末尾。
【BZOJ4275】 我們弄幾個dp分個段搞一搞就是O(n^2)了。
【BZOJ4276】 二分圖匹配做一下就好了。jiangshibiao告訴我這是一個原題。。。很厲害的樣子還沒做馬克一下。
【BZOJ4277】 移動r,然后前面兩個手推一個東西出來,那么就是顯然的。
【BZOJ4278】 比較下后綴的大小,貪心取一取就可以了。
【BZOJ4281】 倍增。
【BZOJ3157】 我們可以令\(f(k)=\sum_{1<=i<=n}i^{k}m^i\),用\((m-1)f(k)\)就很容易拆分計算了。就能\(O(n^2)\)進行遞推。
【BZOJ3516】 雙倍經驗。
【BZOJ4280】 維護上下界和一個加的標記,用線段樹維護。
【BZOJ4321】 被告知oeis大法有線性遞推并不能理解。我們可以dp連通性就可以了。
【BZOJ3620】 顯然對i...n造KMP暴力搞就可以了。
【BZOJ1089】 令\(f_{i}\)表示深度不超過i的樹個數,那么\(f_{i}=f_{i-1}^{n}+1\),就高精下咯。
【BZOJ1002】 我就是來水一下的,拿了公式搞一搞。
【BZOJ4327】 AC自動機裸題。
【BZOJ4350】 令\(f_{i,j}\)表示[i,j]的組成的個數,分()(S),((S)),((S))(S'),折三類搞,可以維護一個\(s_{i,j}\)表示對于1~i的中在1~j中的右括號數,這樣就方便轉移了。
【BZOJ3212】 線段樹裸題。
【BZOJ4293】 考慮到交換位置不影響結果,那么我們從小到大,用線段樹亂搞就可以了。
【BZOJ1101】 上古題目,用低水平姿勢就能推出來了。
【BZOJ2801】 對于一個連通分量,對一個點設一個x,然后遞推一發。
【BZOJ2799】 從小到大考慮,我們搞出以前沒用的且不被覆蓋的權值,還有維護當前沒被覆蓋的權值,如果這兩個等于一個子樹且從上到下如果只有一個后繼,那么該點能被推出來,否則就是能搞出沒用且不被覆蓋的權值個數。
【BZOJ4373】 維護hash值然后用線段樹搞一搞。
【BZOJ4390】 樹上差分,dfs序維護。
【BZOJ4392】 線段樹。
【BZOJ3943】 最大生成樹。
【BZOJ3940】 AC自動機。
【BZOJ4396】 set搞一搞。
【BZOJ3123】 啟發式合并+可持久化線段樹。
【BZOJ3743】 學習了一種O(n)的姿勢,先搞出K個點的最大生成樹,然后考慮點在內在外,跑跑bfs就行了。
【BZOJ1815】 由于整數拆分的方案很少,直接上burnside就可以了,點的置換可以對應邊的置換,塊內n/2,塊間gcd(i,j)。
【BZOJ3488】 感覺是個很顯然的題不知道為什么沒什么人過,可以用線段樹合并或者可持久化線段樹都能做。
【BZOJ3221】 可持久化線段樹就能夠做了。。。我們之后就只需要麻麻麻就可以了。
【BZOJ3514】 用LCT維護需要彈哪一個邊,這樣可持久化線段樹維護一波就可以了。
轉載于:https://www.cnblogs.com/YJMWOI/p/5080269.html
總結
以上是生活随笔為你收集整理的论逗逼的自我修养——BZOJ第一页计划的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的 FPGA 学习历程(11)—— 实
- 下一篇: LeetCode - Valid Num