退役前的作題記錄3

[CERC2017]Gambling Guide

設 $f_u$ 表示 $u$ 到 $n$ 的指望。 $f_n=0$ $$f_u=1+\sum_{v\in suf_v}\frac{min(f_u,f_v)}{d_u}$$ $$\rightarrow f_u=1+\sum_{v\in suf_u,f_v<f_u}\frac{f_v}{d_u}+\sum_{v\in suf_u,f_v\ge f_u}\frac{f_u}{d_u}$$ $$\rightarrow f_u=\sum_{v\in suf_u,f_v<f_u}\frac{f_v+d_u}{\sum_{v\in suf_u,f_v<f_u}1}$$ 這個東西知足堆優化 $Dijkstra$ 的貪心策略,因此就堆優化 $Dijkstra$ 便可。php

TopCoder SRM489Div1:AppleTree

能夠先算出知足要求至少要多長,假設長度爲 $L$,那麼剩下的 $d-L$ 能夠任意插入,這樣就能夠直接計算答案了。 考慮怎麼算長度,將 $r$ 從小到大放入,顯而後面的必定知足前面的限制。 設 $f_{i,j,k}$ 表示插入到了第 $i$ 個數,有 $j$ 個空須要插入,總長度爲 $k$ 的方案數。 每次插入一個數字就看插到中間或者兩邊,能夠選擇插入以後不計算貢獻(表示新建空給後面的插入),若是不新建空就計算長度貢獻。html

Atcoder ARC071 F:Infinite Sequence

能夠發現,若是有連續的兩個數字都大於 $1$,那麼後面的數字都是同樣的。 設 $f_i$ 表示前 $i$ 個位置的答案(當前位置的數不肯定),每次能夠寫一個 $1$,或者放一個 $x(x>1)$ 和 $x$ 個 $1$,能夠前綴和優化。 每次的 $f_i$ 貢獻答案,能夠枚舉填兩個大於 $1$ 的,或者填一個大於等於剩下長度的。 注意特判 $f_i,i=n$ 時候的貢獻。git

Atcoder AGC013 D:Piling Up

能夠發現,若是直接設 $f_{i,j}$ 表示前 $i$ 輪,還有 $j$ 個黑球的方案數,最後的序列會計算重複。 考慮怎麼樣子纔會計算重複,也就是黑球的變化曲線經過上下平移能夠重合。 不難同一種方案的曲線中必定會有一條的最小值爲 $0$。 因此強制在最小值爲 $0$ 的時候計算便可。狀態裏面多加一維 $0/1$ 表示是否通過 $0$ 便可。web

Atcoder ARC073 F:Many Moves

確定是兩個點交叉走,每次走一個區間。 直接在區間的端點處轉移過來,每次貢獻爲區間長度內的走的代價和另外一個點跳過來的代價。 這個顯然能夠兩棵權值線段樹維護。算法

Codeforces 1082 F:Speed Dial

$trie$ 樹上選擇 $k$ 個點便可,簡單樹形 $DP$。數組

Codeforces 1103 D:Professional layer

答案只和 $d$ 的質因子有關,因此 $a$ 除掉多餘的質數,顯然最多選擇 $11$ 個數,每一個數字刪除 $d$ 的質因子的一個子集。 那麼能夠設計出一個簡單的狀壓的子集 $DP$,而後對於除掉多餘的質數相同的確定選擇前 $11$ 小就行了。 而且一個狀態 $S$,最多隻能從小到大轉移 $11$ 次,而後複雜度就卡入 $20s$ 了,因爲很是不滿,因此實際上很是的快。安全

Atcoder ARC073 E:Ball Coloring

分兩種狀況: 一個是最大值和最小值不在一邊,那麼直接比較 $x,y$ 貪心分配便可。 當最大值和最小值在一邊的時候,按照 $x$ 排序,枚舉最小值,而後反轉前綴的 $x,y$ 便可。網絡

[ZJOI2012]波浪

只要按照從小到大的順序插入全部數就好了。 設 $f[i][j][k][l]$ 表示插入 $i$ 個數,當前序列波動值爲 $j$,序列如今被分爲 $k$ 個連續的段,序列邊界的狀態爲 $l$ ,$l$ 爲 $0$ 表示邊界沒有數,爲 $1$ 表示邊界有一個數,爲 $2$ 表示邊界有兩個數。app

Atcoder AGC030 F:Permutation and Minimum

考慮從大到小加入數字,把 $2n$ 個位置分紅 $n$ 組。 那麼能夠設計狀態 $f_{i,j,k}$ 表示從大到小的第 $i$ 個位置,有 $j$ 個已經知道位置而且有一個未知的個數,$k$ 個不知道位置而且有一個未知的個數。 而後轉移便可,最後乘上兩個都未知的個數的階乘。ide

Codeforces 809C:Find a car

轉化成左上角矩陣的求和,數位 $DP$,設 $f_{i,0/1,0/1,0/1}$ 表示 $i$ 位,三個限制是否到達危險態,記錄和和方案數便可。

Codeforces 908G:New Year and Original Order

假設第 $i$ 位填 $3$, 那麼他的貢獻的 $3\times 10^i$,考慮把這個貢獻拆開。 好比:$3\ge3,3\ge2,3\ge1$ 咱們在這一位填 $1,2,3$ 時都記上 $10^i$ 的貢獻。 設 $f_{i,j,k,l}$ 表示前 $i$ 個位置,有 $j$ 個位置的數字大於等於 $k$,$l$ 表示是否爲安全態。 直接轉移便可。

Codeforces 799E:Aquarium decoration

按照兩我的喜歡的狀態分紅 $4$ 類。 首先每一類選的東西確定是排序以後的一個前綴。 枚舉兩個都喜歡的選擇多少個,貪心選只有一個喜歡的,剩下的選擇前 $k$ 小便可。

TopCoder SRM502Div1:TheCowDivOne

考慮容斥,枚舉最後一個數出現的次數 $i$。 那麼能夠發現前面 $k-i$ 個數的取值必須是 $gcd(n,i)$ 的倍數,否則確定沒有解。 考慮最後這個數的取值有哪一些,當固定前 $k-i$ 個數的和的時候,最後這個數字顯然能夠取出 $gcd(n,i)$ 種值。 設 $f_{i,j}$ 表示 $[0,n-1]$ 取出 $j$ 個,和爲 $i$ 的倍數的方案數。 那麼 $$f_{p,k}=\sum_{i=0}^{k}(-1)^{i-1}(n/p)\times gcd(i,p)\times f_{gcd(i,p),k-i}$$ $n/p$ 表示最後一個數在整個 $[0,n-1]$ 的取值。 注意到咱們要選取的集合是無序的,而任何一個數均可以成爲最後一個數,那麼最後要除掉 $k$。 考慮這樣的狀態數,$f_{i,j}$ 被訪問當且僅當 $i|n,i|(k-j)$。 狀態數就是 $\sum_{i}[i|n]\frac{k}{i}$ 級別的,即 $kln k$,總複雜度就是 $O(k^2lnk)$。

POJ1149:PIGS

網絡流。 源點向每一個豬圈連邊,容量爲豬的個數。 按照人分層,上一層的點向一層分配,並向匯點連邊,容量爲每一個人的上界。

Codeforces 434D:Nanami's Power Plant

把費用取反以後轉化爲最小費用的模型,注意到 $l_i,r_i$ 都很小,很容易能夠轉化成「HNOI切糕」的模型。 每一個點創建 $r_i-l_i+2$ 個點,相鄰兩個點 $(x-1,x)$ 之間連邊 $-(a_ix^2+b_ix+c_i)$。 而後對於限制 $(u,v,d)$,就直接 $u$ 的 $x$ 號點向 $v$ 的 $x-d$ 號點連邊 $inf$ 便可。 最後跑一遍最小割,因爲流量不能是負,就給每一個點的邊加上一個大於全部權值的極大值 $A$ 便可。 答案就是 $nA-mincut$。

BZOJ4501:旅行

設 $f_u$ 表示 $u$ 到 $n$ 的最小指望,$d_u$ 爲出度,$suf_u$ 爲出邊集合,那麼 $$f_u=1+\frac{\sum_{v\in suf_u}f_v}{d_u}$$ 能夠選擇刪掉一些出邊,考慮分數規劃。 分數規劃完以後,因爲有刪除 $y$ 就必須刪除 $x$,即選 $x$ 就必須選 $y$ 的限制,因此求一個最大權閉合子圖便可。

Codeforces 802C:Heidi and Library

費用流。 首先能夠拆點,$i,i+n$ 連 $-inf$,表示必須選。 對於 $i,j$ 兩天,若是 $a_i\ne a_j$ 那麼連 $i+n,j$ 邊權爲 $c_{a_j}$,不然邊權爲 $0$。 這樣就只要選出覆蓋全部 $i,i+n$ 的路徑,權值和最小就行了。 因爲最開始強制了 $i,i+n$ 連 $-inf$,因此每一次增廣一定覆蓋全部 $i,i+n$ 的路徑。 所以根據費用流的性質,只須要當代價不會更小的時候結束增廣便可。

[ZJOI2011]營救皮卡丘

費用流。 相似上面的建圖,預處理出 $f_{i,j}$ 表示 $i$ 到 $j$ 不通過大於 $j$ 的點的最短路。 $i+n$ 向 $j$ 連 $f_{i,j}$ 代價的邊便可。

TopCoder SRM570Div1:CurvyonRails

費用流。 對於這種網格確定要想到黑白染色。 考慮若是沒有直線的代價怎麼求是否有合法方案。 那麼就是每一個點入度等於出度,因爲黑白染色了,因此能夠令黑點入流量爲 $2$,白點出流量爲 $2$,相鄰的連邊網絡流出解。 如今有直線的代價,考慮把一個點分出兩個點出來,分別表示上下和左右。 選了兩次上下或者兩次左右的時候有額外代價。 直接連兩條邊,一條費用 $0$,一條 $1$。由於費用流的性質,因此確定會先走 $0$ 邊。

BZOJ3691:遊行

費用流。 首先能夠把額外代價當作是沒有入邊的點貢獻,這樣就能夠建圖,$(i,j+n)$ 費用爲最短路。 或者 $(i+n,i)$ 容量爲 $\infty$,只鏈接原圖中有邊的 $(i,j+n)$。 如今的問題是多組詢問的 $C$。 根據費用流增廣的性質,存在一個增廣的時刻,使得以前每次增廣的代價小於等於 $C$,以後大於 $C$。 那麼二分這個分界點就行了。

Codeforces 671D:Roads in Yusland

線性規劃問題的對偶問題轉化:$max{c^Tx|Ax\le b} = min{b^Ty|A^Ty\ge c}$ 放到這個題目轉化就變成了:選最多的邊(能夠重複),使得每一個人的覆蓋的邊不超過 $c_i$ 條。 這個東西就從深到淺貪心就行了,可並堆維護便可。

CodeChef:Ski Resort

一條路徑 $p_1,p_2,...,p_k$ 不合法當且僅當 $\exists i < k, p_i < p_{i+1}$。 那麼顯然能夠轉化爲求 $S$ 和 $T$ 的最小割。每一個點向小於等於它的點連邊便可。 而因爲若是同時兩個點割了出點一樣的邊,顯然只要增長到兩個點的最大值就行了,可是咱們割了兩次,因而就假了。 因此能夠把一個點拆成 $5$ 個點,把周圍的點按照高度小到大排序。 周圍的點依次連邊這個點拆成的相鄰的點,邊權爲 $inf$。 這個點相鄰的點依次連高度對應的代價。 能夠發現,每一個點拆成的點若是割掉了後面的邊而後再割前面的必定不優,保證了正確性。

Codeforces GYM 101194 J:Mr.Panda and TubeMaster

容易發現是費用流。而後套一個「CTT2017無限之環」發現並不能夠,不只很差限制直線,並且難以處理每一個點能夠選或不選。 考慮給每個點欽定一個出邊,拆點。 一個比較奇怪的作法就是:先黑白染色,讓黑點只考慮上下連邊,白點只考慮左右。 這樣下來,只須要每一個點直接連邊就能解決每一個點必須選擇的問題了。 而後考慮怎麼樣實現每一個點能夠選或不選,其實只要本身匹配本身就行了。 最後實際上只要跑一遍二分圖最大權匹配就行了。

[CEOI2008]Fence

沒想到 111 和 20 竟然不是亂給的。。。 首先 $20\times 3 < 111$ 若是能圍住就儘可能圍住(圍住的最小單位顯然是 $3$)。 不能圍住的先無論,那麼就是對能圍住的找到一個最小的環。 枚舉每一條向量看是否能圍住(都在內側),而後 $floyed$ 找最小環便可。

[HAOI2011]防線修建

就是動態刪除,要求上凸殼的長度。 倒過來變成動態加入,用平衡樹(set)維護凸殼便可。

[SCOI2015]小凸想跑步

求出第一條邊和每一條邊的限制,這是一個線性規劃的形式,半平面交求出可行域便可。

[SDOI2013]逃考

求出泰森多邊形,而後連邊便可。 枚舉每個點,求出它和每一個點的中垂線,這樣求出半平面交就能夠求出這個點管轄的範圍,而後與外面的點連邊,最後 $BFS$ 便可。 Geometry_Widget真好用。

Codeforces 718C:Sasha and Array

矩陣乘法知足結合律,因此就線段樹維護矩陣便可。

[FJOI2016]神祕數

考慮從小到大加入數字,假設前面可以湊到 $x$,若是新的數 $v \le x+1$,那麼能湊出的數變成 $x+v$,不難發現只要每一次加入 $\le x+1$ 就行了。主席樹維護。 因爲每兩次必定翻倍,那麼就是兩隻 $log$。

51NOD 1685:第K大區間2

二分答案,而後詢問知足的奇數區間的該個數。

Codeforces 715C:Digit Tree

點分治,由於 $10^d$ 和 $m$ 互質,因此存在逆元,$map$ 查詢便可。

Codeforces 833D:Red-Black Cobweb

按照套路,首先點分治。 那麼就是要求知足如下條件的路徑的權值的乘積。 $\begin{cases} 2(b_1+b_2) \ge w_1+w_2\ 2(w_1+w_2) \ge b_1+b_2 \end{cases} $ 因爲點是無序的,又不能直接求二次剩餘,因此不太好作,直接求能夠用 $CDQ$ 分治解三維偏序,套上點分治,三隻 $log$。 仔細觀察這個東西,不合法的條件有兩個,可是實際上一個知足,另外一個必定不知足,因此求解不合法便可,二維偏序,樹形數組實現。

BZOJ4548:小奇的糖果

枚舉下邊界,向上掃描,每一次刪除點。合法的線段必定是相鄰兩個同色點卡着的,每次合併一下便可。 樹形數組+鏈表維護。

POJ3718:Facer's Chocolate Dream

顯然答案只跟 $1$ 的個數有關,那麼能夠設 $f_{i,j}$ 表示選了 $i$ 個,有 $j$ 個位置爲 $1$ 的方案數。 由於 $v$ 個 $1$ 能夠任意組合,咱們再除以一個組合數 $\binom{n}{v}$ 就是答案。 假設選出的 $m$ 個數不一樣順序算是不一樣的方案,求出來之後再除以一個 $m!$ 就能夠了。 這樣就好作了,直接 $DP$ 便可。四種狀況。 可是並無考慮第 $i$ 個數與以前的 $i−1$ 個數重複的狀況,因此要減去。 減去的方案數就是 $f_{i-2,j}\binom{n}{3}(i-1)$

POJ1845:Sumdiv

按照公式計算便可。注意判斷是 $9901$ 倍數的狀況。

牛客Wannafly挑戰賽25 A:因子

每一個質因子分別考慮便可。

LOJ530:「LibreOJ β Round #5」最小倍數

$n!$ 中質數 $k$ 有 $\sum_{i}\lfloor\frac{n}{k^i}\rfloor$ 個。至關因而將 $n$ 轉化成 $k$ 進制後,設第 $i$ 位的值位 $v$,那麼就有 $(v ... . vv)_{k}$ 的貢獻。 預處理一下前綴和之類的就能夠算出每一個 $k$ 對應的 $n$,最後取個 $max$ 就行了。

BZOJ3309:DZY Loves Math

$$\sum_{i=1}^{a}\sum_{j=1}^{b}f(gcd(i,j))=\sum_{d=1}^{min(a,b)}\lfloor\frac{a}{d}\rfloor\lfloor\frac{b}{d}\rfloor\sum_{i|d}f(i)\mu(\frac{d}{i})$$ 考慮計算 $g(d)=\sum_{i|d}f(i)\mu(\frac{d}{i})$ 這個東西能夠當作是枚舉 $d$ 的質因子集合,欽定這些集合的指數減 $1$,而後對於全部的指數的 $max$ 的和。 那麼就很好作了。 若是質因子集合的指數都是 $a$,那麼只有一種狀況爲 $max=a-1$,其它的狀況都是 $max=a$,這些貢獻之間兩兩抵消,設質因子的個數爲 $k$,那麼會剩下一個 $-(-1)^{k}$。 若是質因子集合的指數不都是 $a$,那麼只有兩種狀況,一種是 $max=max{a}$,一種是 $max=max{a}-1$,兩種狀況的方案數都是偶數,同種方案的貢獻兩兩抵消,最後剩下 $0$。 因此只要求出那些質因子集合的指數相同的數的貢獻就行了。 能夠發現有值的 $g$,設爲 $g(x^a)$($a$ 爲相同的指數),那麼 $g(x^a)=-\mu(x)$ 因此能夠直接枚舉 $\mu$ 篩出 $g$,複雜度顯然是線性的。 用上面的方法配上杜教篩應該是能夠作到 $a,b\le 10^9$ 級別的詢問的,枚舉那個 $a$ 篩 $\mu$ 的前綴和就好了(大概)。

BZOJ3561:DZY Loves Math VI

不妨假設 $n\le m$,爆推: $$\sum_{i=1}^{n}\sum_{j=1}^{m}lcm(i,j)^{gcd(i,j)}=\sum_{d=1}^{n}d^{d}\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}(ij)^{d}[i\perp j]$$ $$=\sum_{d=1}^{n}d^{d}\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}(ij)^{d}\sum_{g|gcd(i,j)}\mu(g)=\sum_{d=1}^{n}d^{d}\sum_{g=1}^{\lfloor\frac{n}{d}\rfloor}\mu(g)\sum_{g|i}^{\lfloor\frac{n}{d}\rfloor}\sum_{g|j}^{\lfloor\frac{m}{d}\rfloor}(ij)^{d}$$ $$=\sum_{d=1}^{n}d^{d}\sum_{g=1}^{\lfloor\frac{n}{d}\rfloor}\mu(g)g^{2d}\sum_{i=1}^{\lfloor\frac{n}{dg}\rfloor}i^d\sum_{j=1}^{\lfloor\frac{m}{dg}\rfloor}j^{d}$$ 枚舉 $d$,預處理天然數冪和(顯然不用快速冪)暴力計算便可,複雜度爲調和級數,$O(nlnn)$。

BZOJ3601:一我的的數論

爆推: $$\sum_{i=1}^{n}[i\perp n]i^d=\sum_{i=1}^{n}i^d\sum_{g|gcd(i,n)}\mu(g)=\sum_{g|n}\mu(g)\sum_{g|i}i^d=\sum_{g|n}\mu(g)g^d\sum_{i=1}^{\frac{n}{g}}i^d$$ 這玩意兒前面是一個狄利克雷卷積,後面忽然出現了一個天然數冪和就很難受。 而衆所周知,天然數冪和 $\sum_{i=1}^{n}i^d$ 是一個關於 $n$ 的 $d+1$ 次數多項式。 運用高斯消元或者拉格朗日插值等方法不可貴到這個多項式 $f(x)$,那麼答案就能夠寫成 $\sum_{g|n}\mu(g)g^df(\frac{n}{d})$。 能夠發現,多項式的每一項都是一個 $(\frac{n}{d})^ka_k$($a$ 爲係數)的形式,不考慮係數,則這顯然是一個積性函數。 所以,只要枚舉多項式的冪次,而後對於每個質因子 $p_i^{a_i}$ 求出答案便可。

LOJ6102:「2017 山東二輪集訓 Day1」第三題

首先有個性質 $gcd(f_i,f_j)=f_{gcd(i,j)}$ 根據最值反演不難發現有:$$\prod_{T\subset S,T\ne \phi}f(gcd(T))^{(-1)^{|T|+1}}$$ 爆推: $$\prod_{T\subset S,T\ne \phi}f(gcd(T))^{(-1)^{|T|+1}}=\prod_{d=1}^{n}f(d)^{\sum_{T\subset S,T\ne \phi}{(-1)^{|T|+1}}}[gcd(T)=d]$$ $$\sum_{T\subset S,T\ne \phi}{(-1)^{|T|+1}}[gcd(T)=d]=\sum_{d|i}\mu(\frac{i}{d})\sum_{T\subset S,T\ne \phi}{(-1)^{|T|+1}}[i|gcd(T)]$$ 設 $g_i=\sum_{T\subset S,T\ne \phi}{(-1)^{|T|+1}}[i|gcd(T)]$。 能夠發現 $g_i=\begin{cases}1,\exists k_i,d|k_i\ 0,otherwise \end{cases}$ 預處理 $h_d=\sum_{d|i}\mu(\frac{i}{d})g_i$,而後直接計算答案便可。

CodeChef:Counting is life

$n,k$ 同奇偶的時候,第一問答案顯然就是 $2^{k}-1$,第二問直接構造生成函數,就是 $x^n^k$,直接二項式定理展開便可。 $n,k$ 不一樣奇偶的時候,第一問答案顯然就是 $2^{k}-2$,第二問即 $x^n^{k-1}(\frac{e^{x}+e^{-x}}{2})$

CodeChef:Counting D-sets

每一種方案數必定能夠平移,使得每一維都有 $0$,考慮只在每一維都有 $0$ 的時候計算答案。 顯然能夠先計算直徑至多爲 $d$ 的減去至多爲 $d-1$ 的。 考慮容斥,枚舉至多 $i$ 爲沒有達到 $0$,答案即 $\sum_{i=0}^{n}\binom{n}{i}(-1)^i2^{(d+1)^{n-i}d^i}$

[LOJ6392:「THUPC2018」密碼學第三次小做業/Rsa

](https://loj.ac/problem/6392) 由於 $e_1\perp e_2$,因此 $e_1x+e_2y=1$ 有解。 由於 $n\perp c_1,n\perp c_2$,因此 $c_1,c_2$ 有逆元。 解出來 $x,y$ 以後快速冪便可。

UOJ424:【集訓隊做業2018】count

設 $A=$ 長度爲 $n$ 的序列 $X$,其中的每一個數都是 $1$ 到 $m$ 內的整數,且全部 $1$ 到 $m$ 內的整數都在序列 $X$ 中出現過的方案數。 $B=$ 長度爲 $n$ 的序列 $X$,其中的每一個數都是 $1$ 到 $m$ 內的整數,且最大值爲 $m$ 的方案數。 一個結論:當 $n\ge m$ 的時候,$A=B$ 爲了證實這個東西,首先假設 $C=$ 長度爲 $n$ 的序列 $X$,其中的每一個數都是 $1$ 到 $m$ 內的整數的方案數,而後只要證實 $A=C$ 而且 $C=B$ 便可。 首先 $B=C$,顯然對於 $C$ 的一個方案,把全部的數加上 $m-max$ 與原來序列同構,就能夠獲得 $B$ 了,因此 $C\le B$,而根據定義顯然 $C\ge B$,因此 $C=B$。 而後是 $A=C$,首先根據定義也有 $C\ge A$,而後對於 $A$ 的每一種方案,在保證下標先後的大小關係不變的條件下,把相同的數從前日後依次變化(強制後面的小於等於前面的),顯然和原來的同構,而且必定能夠取遍 $m$ 個值,因此 $A\ge C$。 也獲得了 $A=B=C$ $B$ 比較好算,設 $f_{i,j}$ 表示長度爲 $i$,最大值爲 $j$ 的序列的個數。 爲了保證同構的不算重複,枚舉左右拼接的時候強制在達到最大的狀況下計算。 也就是 $$f_{i,j}=\sum_{k=0}^{i-1}f_{k,j-1}f_{i-k-1,j}$$ 最後 $f_{n,m}$ 就是答案。 把數組兩維調換 $f_{i,j}=\sum_{k=0}^{j-1}f_{i-1,k}f_{i,j-k-1}$ 寫成多項式 $f_i=f_if_{i-1}x+1$,那麼 $f_i=\frac{1}{1-f_{i-1}x}$。 不妨假設 $f_i=\frac{a_i}{b_i}$,那麼 $$f_{i+1}=\frac{a_{i+1}}{b_{i+1}}=\frac{1}{1-\frac{a_i}{b_i}x}=\frac{b_i}{b_i-a_ix}$$ 寫成矩陣的形式 $$(a_i,b_i)\begin{bmatrix}0 & -x \ 1 & 1 \end{bmatrix}=(a_{i+1},b_{i+1})$$ 帶入單位根矩陣快速冪,而後 $IDFT$ 出 $a,b$,最後求逆便可。 另外的方法

按照題目的大小關係創建這個序列的笛卡爾樹,那麼左兒子的必定小於當前點,右兒子大小必定小於等於當前點。 不難發現,合法的笛卡爾樹必須知足根到每一個點向左走的次數必須 $<m$,這個條件在 $n\ge m$ 的條件下就是充要條件(根據上面的東西不可貴到)。 能夠用左兒子右兄弟的方法(新建超級點),多叉樹森林轉二叉樹,同時也能夠每次抽出右邊的鏈實現二叉樹轉多叉樹森林,這樣子,一個多叉樹森林能夠一一對應一個二叉樹。 至此,題目能夠轉化成:有多少個長度爲 $2n$ 的合法括號序列,每一個前綴(左括號 $+$,右括號 $-$ )不超過 $m$。 也就是 $(0,0)$ 走 $2n$ 步到 $(n,n)$,每次能夠向上走或者向右走 $1$,使得不超過 $y=x+m$ 和 $y=x$ 的路徑條數。 算法參見 [JLOI2015]騙我呢。

上面的東西好像有點鍋,因此能夠去看一看 wxh 的口胡QwQ。

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息