Link

Aeon

显然字典序最大就是把最小的字母放在最后

Business

[动态规划]

简单dp

dp[i][j]dp[i][j]dp[i][j]表示到第iii天,当前有jjj块钱,最后返还的钱最多为多少

完全背包转移

Celebration

Description

有一个

,求把它分成三段,使得每一段内无重复元素,且三段长度可以作为某个三角形的三边的方案数。

一个拆分方案可以看作一个三元组 (a,b,c)(a,b,c)(a,b,c),其中 0<a<b<c≤n0lt alt b lt c le n0<a<b<c≤n,表示在第 a,b,ca,b,ca,b,c个位置之前断开。两个拆分不同当且仅当其对应的三元组不同。

n≤2×106nle 2times10^6n≤2×10​6​​

Solution

[计数] [树状数组]

定义长度不超过 n−12frac{n-1}{2}​2​​n−1​​ ,且不含重复颜色的段为合法的段。记 prexpre_xpre​x​​ 为以

为右端点的合法段最远的左端点,nxtxnxt_xnxt​x​​ 为以 xxx 为左端点的合法段最远的右端点。

先枚举题目中的aaa,那么b∈(a,nxta+1]bin(a, nxt_a + 1]b∈(a,nxt​a​​+1]。在确定了a,ba, ba,b的位置后,合法的ccc位于(b,nxtb+1](b, nxt_b + 1](b,nxt​b​​+1]和[prea,n][pre_a, n][pre​a​​,n]的交集中

可以用树状数组维护:

从左往右枚举aaa,把合法的bbb对应的(b,nxtb+1](b, nxt_b + 1](b,nxt​b​​+1]这段区间在树状数组中+1;查询就直接查[prea,n][pre_a, n][pre​a​​,n]的区间和;在离开aaa的时候把(a,nxta+1](a, nxt_a + 1](a,nxt​a​​+1]区间-1

Disaster

[kruskal重构树]

kruskal重构树模板题

Effort

Description

有 mmm种数据结构(可把数据结构想像成游戏中的种族),第 iii种有 aia_ia​i​​个,每个可给敌人造成至少 111 次,至多 bib_ib​i​​次伤害。有n nn名敌人,每人承担至少一次伤害。求总情况数模 998244353998244353998244353的值

数据结构两两不同 (同种的任两个也不同),敌人两两不同。

两种方案不同当且仅当某个数据结构造成的伤害不同,或某个敌人受到的伤害不同。

n×m≤105,ai≤105,bi <998244353n times mle 10^5, a_ile 10^5, b_i < 998244353n×m≤10​5​​,a​i​​≤10​5​​,b​i​​ <998244353

Solution

[组合数学] [生成函数] [多项式] [NTT]

注意到每个敌人的伤害是无序的,即这个敌人在被第几次攻击到都是一样的,而其他限制都是有序

于是可以钦定攻击顺序和受到伤害的顺序。形象地理解就是先把所有数据结构按顺序摆一排,确定每数据结构攻击多少次,这样就确定出一个攻击序列。再在这个攻击序列上插n−1n-1n−1个板就是这个攻击序列方案数

看上去这是由两个部分构成的(先确定攻击序列,再插板),但实际上可以同时算

设Fi(x)F_i(x)F​i​​(x)表示一个第iii种数据结构插板方案的生成函数,它的kkk次项系数表示插kkk个板的方案数。那么[xk]Fiai(x)displaystyle [x^k]F_i^{a_i}(x)[x​k​​]F​i​a​i​​​​(x)就是在第iii种里插kkk个板的方案数了


考虑如何求Fi(x)F_i(x)F​i​​(x)

第kkk项系数其实就是

(1k)+(2k)+⋯+(bik)
binom{1}{k} + binom{2}{k} + cdots + binom{b_i}{k}
(​k​1​​)+(​k​2​​)+⋯+(​k​b​i​​​​)

发现除了k=0k=0k=0之外,都是是杨辉三角一列的之和,就等于(bi+1k+1)binom{b_i + 1}{k + 1}(​k+1​b​i​​+1​​)

因为bib_ib​i​​很大,不能直接算,但是kkk比较小,所以可以先O(1)O(1)O(1)计算出k=1k=1k=1时的值,然后O(1)O(1)O(1)递推下一个kkk的值


由于只有n−1n-1n−1个板,所以多项式长度始终不超过n−1n-1n−1。直接做多项式快速幂即可,再把mmm个多项式依次合起来

Farewell

Description

有一张 nnn个点 mmm条边的图,第 iii条边 ui,viu_i,v_iu​i​​,v​i​​有 13frac{1}{3}​3​​1​​的概率从ui u_iu​i​​指向 viv_iv​i​​ ,另 13frac{1}{3}​3​​1​​ 的概率从 viv_iv​i​​ 指向 uiu_iu​i​​ ,剩下 13frac{1}{3}​3​​1​​的概率被删除。求这张图是有向无环图的概率

n≤20nle 20n≤20

Solution

[FWT] [子集卷积] [动态规划] [状态压缩]

设FSF_SF​S​​表示SSS是DAG的方案数,ESE_SE​S​​表示点集SSS内部的边数,ES,TE_{S, T}E​S,T​​表示SSS与TTT之间的边数

DAG计数显然枚举入度为000的点容斥

FS=∑T⊆S,T≠∅(−1)∣T∣+1FS−T×2ET,S−T
F_S = sum_{Tsubseteq S, Tne emptyset} (-1)^{|T| + 1}F_{S - T}times 2^{E_{T, S - T}}
F​S​​=​T⊆S,T≠∅​∑​​(−1)​∣T∣+1​​F​S−T​​×2​E​T,S−T​​​​

2ET,S−T 2^{E_{T, S - T}}2​E​T,S−T​​​​是因为从S−TS-T S−T到T TT的边只能断掉或指向TTT

又因为2ET,S−T=2ES−ET−ES−T 2^{E_{T, S - T}} = 2^{E_S - E_T - E_{S - T}}2​E​T,S−T​​​​=2​E​S​​−E​T​​−E​S−T​​​​,所以式子可以化为

FS2ES=∑T⊆S,T≠∅(−1)∣T∣+12ET×FS−T2ES−T
frac{F_S}{2^{E_S}} = sum_{Tsubseteq S, Tne emptyset} frac{(-1)^{|T| + 1}}{2^{E_{T}}} times frac{F_{S - T}}{2^{E_{S - T}}}
​2​E​S​​​​​​F​S​​​​=​T⊆S,T≠∅​∑​​​2​E​T​​​​​​(−1)​∣T∣+1​​​​×​2​E​S−T​​​​​​F​S−T​​​​

子集卷积即可

05-11 22:17