2022.04 学习记录

04.01

各种订正。

04.02

各种订正。

「FJOI2021」加法方程 (equa)

每次查询 A,B 是不变的。由于合法方案字母总数不超过 10,爆搜预处理 A,B 中每个字母对应的取值,对于没出现过的值新增编号占位,把状态 hash 起来。每次查询算出对应编号查 hash 表即可。这里用自然溢出没有被卡。

「FJOI2021」外星飞碟 (ufo)

{s} 的递推式与 EGF 的卷积相似,考虑从 {a}{s} 的 EGF 入手。

A(x)=i1aixii!S(x)=i1sixii!。由 {a} 的递推式可得:

ann!=12(an1(n1)!+an2(n2)!)+(1)nn!+(1)n12(n1)!

(1)A(x)=x2A(x)+x22(A(x)+1)+(ex1+xx2)+(ex1+x)(2)=x+x22A(x)+(2+x2)ex+x2+x22(3)=ex1x1

{s} 的递推式可知:

(4)snn!=i=1naii!ni+1(ni)!(5)=i=1naii!(1(ni)!+1(ni1)!)

(6)S(x)=(1+x)exA(x)(7)=(1+x)ex(ex1x1)(8)=(1+x)(11xex)

答案即为 n![xn]S(x)=2n!n1

使用 FJOI 必备的 O(n) 光速阶乘算法即可通过本题。

04.04

「JOISC 2020 Day4」首都

如果两个同色点要在一个连通块内,则其路径上的所有点也需在连通块内。规定连边 (a,b) 表示若 a 在某一连通块内,则 b 也必须在其中。对连出的图求强连通分量,则答案就是最小无出度强连通分量的大小。连边的形式是点向路径连边,树剖优化。

04.05

「WC2019」I 君的商店 (shop)

subtask3 得到启示:如果可以在 5n 的代价内将序列排序并找到一个 1,则可以用 2logn 的代价求出答案——这只需要简单的二分,最后剩下一个元素利用奇偶性判断。

考虑三个元素 a,b,c,不妨设 ab(用 2 的代价得出),讨论 a+bc 的关系:

  • a+bc,则 a=0,换下一个数作为 a
  • a+bc,则 bc,把 c 加到一个序列的末尾,令 cb,再换一个数作为 b

由此可以得到一些确定为 0 的数、一个单调不降的序列,以及最后剩下的一个数。而在剩下的数和序列末尾中,必然有一个是 1。这样就可以二分了。同样利用奇偶性,不难判断出剩下的数和二分剩下的数。

调试问题:二分的写法和边界。

「JOISC 2020 Day2」变色龙之恋

尝试构造图 G=({1,2,,2n},E),满足:

  • (x,y)Equery({x,y})=1

不难发现满足 query({x,y})=1 的二元组 (x,y) 只有三种可能:

  1. x 喜欢 y,且 y 不喜欢 x
  2. y 喜欢 x,且 x 不喜欢 y
  3. x,y 同色。

那么任意结点在 G 中的度数只能为 13。对于结点 u,若其度数为 1,则答案已经确定;否则,将与 u 相邻的三个结点 a,b,c 拿出来两两与 u 一起询问,只有 query{u,u,u}=1,且对于一个结点每条边只会被覆盖一次。因此对每个结点统计一遍,被覆盖超过一次的即为答案。

问题在于如何建出这张图。考虑逐个加入结点 u 并确定其连出的边。首先 G 一定是二分图,因此一定可以将其分成两个极大独立集,并且两个独立集分别对应两种性别,这个可以使用带权并查集维护。对两个集合分别考虑(因为性别未知)。若 u 与集合 S 中没有边,则 query(S{x})=|S|+1。由于最多只有三条边,因此可以分治求出每条边。

查询次数 O(nlogn+3n),时间复杂度 O(n2logn)

「2022-03-22 省选模拟赛」星际广播 (radio)

对三种颜色分别考虑,显然可以 dp。wqs 二分优化。

「2022-03-22 省选模拟赛」星际联邦 (federation)

n 阶循环矩阵 Ai,j=wij0i,j<n) 的行列式,有结论:记 F(x)=i=0n1wixi,则 Det(A)=i=0n1F(ωni),其中 ωnn 次单位根。证明可以将 A 右乘范德蒙矩阵 {ωnij} 后对比两边行列式系数得出。实现时,一次 DFT 即可求出所需的单位根处点值。

对于本题,不难想到加入新结点为根后运用矩阵树定理。构造出基尔霍夫矩阵,发现其为循环矩阵,套用上面的结论即可。

04.06

「2022-04-06 省选模拟赛」方程 (equation)

化一下式子发现只和 a+bc 有关,转化为统计每种 a+bc 的数量,循环卷积和求出离散对数后循环卷积即可。

「JOISC 2020 Day4」治疗方案

从左到右考虑所有区间,需要不间断地覆盖。设 fi 表示考虑前 i 个区间的最小花费,则 fi 可以从满足 rjli+1|tjti|j 处转移过来。这个方程的转移顺序十分不明确,但是可以用类似最短路的方法更新,对绝对值分类讨论,可以把式子拆成与 i 相关的和与 j 相关的,线段树优化建图;类似「NOI2019」弹跳的做法,每个区间只会被更新一次,线段树分别维护。

04.07

「2021 集训队互测」整数

先对所有元素操作一遍,得到一个全 1 序列。按 1n 依次操作 pi

  • 若没有产生进位,表现为 popcount 恰好加一,无法得出信息;
  • 否则,可以通过减少的 1 的数量知道 pi 与上一个进位的位置(特殊地,初始为最高位)间的距离。

重复如上步骤,每轮至少能确定一个数。将排列随机打乱,期望询问次数与随机排列期望最长上升子序列长度同级,故期望询问次数与期望时间复杂度均为 O(nlogn)

调试问题:没有注意到每一轮之后,从第 n+1 位开始逐渐加 1,因此需要特判第一次进位的距离。

CF675E Trains and Statistic

对于每个 i[1,n),其无法直接到达的地方必然选择之后 aj 最大的 j 走。记 fi 表示 [i,n] 的答案,从其后的最大值处转移过来。

[HNOI2011] 卡农

寒假的学习笔记 [HNOI2011] 卡农

04.08

带表妹。

04.09

CF923E Perpetual Subtraction

fi,j 表示第 i 轮时,xj 概率。有转移

fi,j=k=jnfi1,kk+1

Fk(x)=i=0nfk,ixi,则

(9)Fk(x)=i=0nxij=infk1,jj+1(10)=j=0nfk1,jj+1xj+11x1

似乎很难有进一步的推论,但是 xj+1j+1 很容易让人联想到积分:

(11)Fk(x)=1x1j=0nfk1,jxj+11j+1(12)=1x1j=0nfk1,j1xyjdy(13)=1x11xFk1(y)dy

积分下限是 1,这很不好处理,尝试把它变成 0。令 Gk(x)=Fk(x+1)

(14)Gk(x)=Fk(x+1)=1x1x+1Fk1(y)dy(15)=1x0xGk1(y)dy(16)=j=0ngk1,jj+1xj

于是

gm,i=g0,i1(i+1)m

现在只需要实现 {gk}{fk} 的相互转化。先考虑如何从 {fk} 推到 {gk}

(17)Gk(x)=Fk(x+1)=i=0nfk,i(x+1)i=j=0nxji=jnfk,i(ij)

gk,i=j=infk,j(ji)

将组合数展开后是差卷积的形式。从 {gk} 推回 {fk} 只需要套上二项式反演即可。

[SDOI2011]黑白棋

考虑什么时候先手必胜。由于白色不往左,黑色不往右,于是等价于 k2 堆石子,每次可对 x[1,d] 堆石子取走任意数量。这是 nim-k 游戏,先手必胜当且仅当:

  • 把石子数量写成二进制数,每位分别相加,若存在一位满足所有石子在这位之和 0(mod(d+1))

补集转化,求所有位和都为 0 的方案数。逐位考虑,设 fi,j 表示考虑前 i 位,所有石子和为 j 的方案数。枚举这一位上有多少石子得到转移。统计答案时,相当于将剩下的石子放到 K2+1 个段里,经典插板法。

[SDOI2019]移动金币

[SDOI2011]黑白棋 十分类似。这道题相当于阶梯 nim 游戏。记第一个台阶层数为 1,则先手必胜当且仅当

  • 用奇数层台阶上的石头做 nim 游戏时先手必胜。

于是变成了 nim-k 游戏的特殊情况,套用 [SDOI2011]黑白棋 的 dp 即可。

[SDOI2019]连续子序列

T.M.序列,在很多地方都有出现,性质非常多,本题只需要用到其中一个。由 T.M.序列 的构造过程,可以把相邻的 01 缩成 0,相邻的 10 缩成 1,两个相邻的数相同就寄了。枚举第一个从哪里开始,递归下去做,只会用到 O(logn) 个位置。

[ZJOI2016]小星星

子集容斥,求用集合 S 中编号(可重复使用)的方案数,O(n3) 树形 dp。就,过了。

[PKUSC2018]最大前缀和

分别记 sS,fS,gS 分别表示集合 S 中的元素和、考虑 S 中元素时有多少种排列方式使得最大值为 sS、考虑 S 中元素时有多少种排列方式使得所有前缀和 <0。则答案为 SUfSsSgU/Sg 是容易 dp 的;f 的转移,考虑在最前面加入一个数。

[PKUSC2018]真实排名

分别考虑每个人的成绩变不变,不变的话不能变的是一段区间,变的话必须变的是一段区间。

04.10

「WC2018」即时战略 (rts)

调了一年。

暴力思路:每次选一个点,从已知连通块不断拓展直到拓展到为止。直接上点分树,每轮最多拓展 O(dep) 个点,每轮拓展完类似替罪羊重构。总操作次数 O(nlogn)

链要特别搞一下。

调试问题:重构点分树时,可以用深度判断是否在子树内。

「WC2019」远古计算机 (oldcomputer)

大玄学。

subtask1,3:读懂题。

subtask2:有点意思。把斐波那契数列打表出来,jmp 跳到对应行。

subtask4:事实上每个点的第二个寄存器是寄的,主要受到线路的制约。对 150 处理处一条到 51100 任意结点的最短路,按到达的时间顺序输出,经过一些玄学调整可以通过。

subtask5:对每个结点记录其在某个时间结点是否被占用,依次跑最短路,按到达的时间顺序输出,经过一些玄学调整可以通过。

注意审题:多次调用一台计算机会寄。

[HAOI2017]方案数

经典模型的稍加改动,和那个网格图上障碍点的题十分相似。发现方案数只和 popcount 的差有关,预处理每种差的方案数后,容斥 dp 即可。

[WC2020] 猜数游戏

考虑一个元素 x 能对哪些集合贡献。这需要满足 x 在集合中,且集合中没有能表示出 x 的元素。如果能求出元素间的表示关系,计算答案是容易的。分类讨论:

  • (ai,p)>1,则 ai 只能表示出 O(logp) 个数,暴力预处理;

  • (ai,p)=1,考虑 ai 关于 p 的阶 ordp(ai)

    引理:x 能表示 y,当且仅当 ordp(y)|ordp(x)

    结合下文阶的性质 1,2 不难证明其充要性。由此可以把所有元素按阶分类,暴力枚举两数。

简要记一下阶:

对于满足 (x,p)=1 的正整数 x,pordp(x) 定义为最小的 m 满足 xm1(modp),那么显然有 ordp(x)|φ(p)。特殊地,当 ordp(x)=φ(p) 时,称 xp 的原根。求阶可以求出 φ(p) 后用因数试除。

  1. ab(modp)ordp(a)=ordp(b)
  1. ordp(xk)=ordp(x)(ordp(x),k)
  1. 当且仅当 (ordp(a),ordp(b))=1 时,ordp(ab)=ordp(a)ordp(b)

04.11

[HNOI2016]最小公倍数

Powerful Number 图。

本质是求两点是否存在两种最大值恰好为查询的数对的路径。我们希望在只加入两种权值都 该询问权值的情况下统计答案,这样就只需求最大值。离线,对a 排序后分块,对询问按 b 排序。每块考虑 a 在当前块范围内的询问。前面的块按 b 排序,每次能产生贡献的是一段前缀,单指针维护;当前块内暴力加入,可撤销并查集维护。

调试问题:块边界没处理好。

[HAOI2018]反色游戏

当且仅当每个连通块中都不存在奇数个黑点时有解。

记连通块个数为 k,则初始答案为 2mn+k。维护点度数和全局奇黑连通块个数,考虑删去点 u 有什么影响:

  • u 为割点,则会把一个连通块拆成若干连通块,需要预处理拆完后是否存在奇数个点的黑色连通块;
  • 否则,只需考虑其对所在连通块黑点个数的影响。

特殊考虑没连出边的点,对答案没有影响。

调试问题:连通块根节点的割点数量求错。

「2022-02-05 厦门双十联考」区域划分 (divide)

有一些显而易见的无解情况:

  • 相邻结点颜色相同;
  • 有一种颜色没出现过。

但是找不出进一步的结论,于是大胆猜想剩下情况一定有解并通过构造证明。考虑增量构造,每一条边便增加一个三角形,为此需要维护满足左右相邻点和本结点都异色的结点集合,并支持删除一个结点,使用链表维护。但是这样有一个问题,在某种颜色 c 只剩下一个点时,这个算法可能将 c 色点直接删去导致剩下结点无法构造答案,此时特判即可完成构造。

「2021-02-28 联考」询问 (query)

把所有询问离线,每个 k 单独做。求出每个元素作为第 k 大值的所有区间(显然总数 O(nk))后,相当于矩形加单点查。预处理区间可以排序之后使用链表,从小到大考虑完就删去。

「PR #1」删数

差分数组 {d},则每次操作相当于把相邻相同的数删掉一个并把剩下一个 ×2。把所有数按照正负和 dilowbit(di) 分段考虑,显然只有同一段的元素能够缩起来。对于同一段内的元素,我们就只需要考虑 log2lowbit(di),那么合并两个数就相当于把两个数删去一个并把剩下一个 +1,这样就和 [USACO16OPEN]262144 P 一样了,类似倍增维护出合并出 j 时所在的位置,多加一个统计答案的 dp 即可。

调试问题:分段边界没清空。

04.12

[HAOI2018]奇怪的背包

拓展一下二元一次不定方程的结论

n 元一次不定方程 i=1naixi=b 有解,当且仅当 (a1,a2,,an)|b

那么记 fi 表示 gcd()=i 的集合数量,每次询问的答案即为 d|wifdf 背包一下就好了。

[HAOI2018]字串覆盖

数据范围明示数据分治。

  • rl>50:后缀树上定位到对应结点 SAM 线段树合并二分求出区间中最前的结点,暴力求下一个区间在哪里。rl[50,2000] 的询问次数不多,暴力跳的总次数不多。

  • rl50:对每种长度分别考虑,倍增预处理跳了 2j 个串后到达的位置及对应左端点下标和。

04.14

学习 PGF,见学习笔记

[PKUSC2018]星际穿越

u 出发,第一次跳跃能走到 [lu,x] 的点,其中 x 是最大的能走到 u 的点;从第二次跳跃开始,行动轨迹变得有迹可循:记上一次跳跃能到达的左端点为 p,每次能够跳到 mini=pxli 处。这启发我们倍增预处理跳 2j 步后到达的点,顺便维护跳 2j 步代价之和。查询时特判第一步和最后没法跳满的部分。

04.15

「2020-04-21 省选模拟赛」探险队 (expedition)

对反图建以 T 为根的最短路径树,则被删去的边一定在 S 的祖先链上。对于一条非树边 (u,v,w),其能对 LCA(u,v) 以下的所有结点 x 提供一条从绕开其父边的路径,总代价为 disudisx+disv+w。可以从下往上跳,堆维护每条可行路径,但由于理解错题意对着堆调了一个上午导致我不想再碰它;题解给出了一个比较难想到的做法:记 fu 表示从 u 出发的答案,gu 表示发现有边被删后的最优策略下的路径长度,则 fumax(gu,fv+wu,v),转移顺序不明确,最短路优化。

调试问题:对题意给出了错误的理解。

「2020-04-03 省选模拟赛」玩具 (toy)

记会随时间增加边权的边为特殊边,则随着 x 增大,所用的特殊边数量是单调的,且对于使用同样数量特殊边的方案,其所用边集必然相同。于是把询问离线之后整体二分,费用流记录用了几条特殊边即可。

04.17

「JOISC 2020 Day2」遗迹 3

考虑如何从 h 得到 A。从后往前,对于柱子 i,若 hi 在后面的最终高度没出现过,则会保留;否则会一直减到在后面的最终高度没出现为止。

i 的最终高度等于 小于 i 的初始高度的值中最大的 没在 [i+1,2n] 的最终高度种出现过的值。

不妨先暴力一点,状压后缀没出现过的最终高度的集合。设 fi,S 表示从后往前考虑到第 i 个位置,S 中的高度没在最终高度中出现过。由于我们并不知道每种初始高度出现过多少次,在这里认为高度相同的两个石柱本质不同,最后除掉 2n。转移讨论是否被保留:

  • 未被保留,记 S 中极长前缀 0 长度为 j[i+1,2n] 中未被选择的位置个数为 c,则这个位置必须填一个 [1,j] 中的数。那么总共有 2j 个数可供选择,其中已被选择的高度有 j+c 个(每个被保留的位置恰有一种高度,每个未保留位置的高度也在 [1,j] 中),则转移系数为 jc

  • 被保留,枚举该位置的最终高度 k,我们需要保证填入的初始高度能被减到 k。记 Sk 后的极长连续 0 长度为 d,则转移系数为 d+2(初始高度为 k 有两种,初始高度 >kd 种)。

现在需要优化状态。注意到极长前缀 0 的长度非常关键,设 fi,j 表示从后往前考虑到第 i 个数,最终高度的前缀极长连续段为 1j。转移依然讨论是否保留。未被保留的情况是简单的,转移需要的信息记在状态里,直接转移即可;但对于被保留的情况,此时我们并不知道 k 后极长连续 0 的长度,需要稍作调整。

我们只关心极长前缀连续 0 的长度,因此如果新加入的最终高度 >j+1,我们可以先放着不管,而是在之后某一次加入使得中间都连上时一起加入并统计贡献。说人话,每次转移加入一段连续的数 [j+1,j+k],比较类似贡献推迟计算的 trick。这样每次考虑的最终高度都是一段前缀。讨论:

  • 加入的数不连续。由于推后计算,直接令 fi,jfi+1,j

  • 加入一段连续的数。枚举加入数的个数 k,即从 fi+1,jfi,j+k。注意我们钦定了这个位置上的最终高度为 j+1。则 i 上可以选择 k+1 个数(考虑方式与状压时相同)。记 e[i+1,2n] 中保留的位置个数,则在这些位置中还需包含 [j+2,j+k] 的元素,方案数为 (ejk1)。但此时我们并没有确定初始高度的方案数,这似乎不好快速计算。这些数的初始高度显然在 [j+2,j+k] 这个长度为 k1 的区间中,这就意味着这个方案数与 j 没有关系,不妨先记作 tk1。于是得到转移 fi,j+kfi+1,j(k+1)(ejk1)tk1

遗留的问题是 ti 的计算。明确一下 ti 的定义:填入 i 个在 [1,i] 中的数使得最终高度恰为 1i 的排列。称满足这一条件的填入方案合法,则一种填入方案合法当且仅当对 1ki,填入的数中 k 的数不超过 k 个。

再做一个 dp,记 gi,j 表示考虑 i 初始高度,填入 j 个位置的方案数,则 ti=gi,i。转移考虑新加一种初始高度,枚举填了多少个(02):gi,j=gi1,j+gi1,j12j+gi1,j2j(j1)。只需保证 ji 即可满足合法性。

时间复杂度 O(n3)

04.18

「JOISC 2020 Day2」有趣的 Joitter 交友

双向边连接形成的连通块会被缩成团,直接维护这个团。需要维护的信息有:团中元素的集合 E、连向该团的团的集合 A、该团连向的团的集合 B、连向该团的点集 C,则一个团的贡献为 |E|(|E|1)+|E||C|。连边时启发式合并缩团,可能产生连锁反应,类似 bfs 队列维护。

调试问题:写了假的启发式合并,遍历了大的集合。

「NOI2019」回家路线

式子看着就很斜优。对每个地点维护斜率单调队列,按时间枚举事件(到达、出发),到达时尝试加入队列,出发时转移。

04.19

「NOI2019」I 君的探险

暴力

枚举每个点操作,若操作后某个点状态改变则有连边。

树(x<y

二分父亲的位置,整体二分。

树(一般情况)

考虑每次删去叶子。令标号变为 [1,n]。对每个 k,把二进制下第 k 位为 1 的拿出来,记录状态改变的点,则可得到所有相邻点编号的异或和 sx。那么对于叶子,则有 sx=x。并且可以通过 O(1) 次操作判断两点间是否有边,依此逐步迭代。

一般情况

对每个点以 12 的概率随机修改,记修改的集合为 S,状态改变的点集为 T,则 T 中结点与 S 中结点定有连边。分治,每次随机修改,划分集合。使用 check 减少孤立点个数以剪枝。


与非 (nand)

与非可以表示出所有基本位运算。因此直观来看可以表示的数很多。考虑二进制下两位 i,j,若对所有数 k 都有 ak,i=ak,j,则结果中这两位一定相同,否则互不影响。并查集维护出相同的集合。按照套路,统计答案时从高到低枚举相同的位数。


CF212A Privatization

寒假的学习笔记

CF1147F Zigzag Game

寒假的学习笔记

04.20

vp 联合省选 Day1,打得比较保守,T2 T3 只写了暴力。

「ExPR #1」乘积(ABC239 Task Ex (Dice Product 2))

fi 表示 m=i 时的期望,则 fn=1+i=1nfni。移项后类似杜教筛递归计算即可。


[ZJOI2019]开关

k 次开关得到目标状态和回到原状态的 EGF 分别为

F(x)=ex+(1)siex2

G(x)=ex+ex2

但我们想要的是期望,也即概率生成函数(OGF)的导数。设 f(x),g(x) 分别为 F(x),G(x) 转为 OGF,则所求即为 h(1)=(fg)(1)

F(x) 写成 cieix 的形式,则有 f(x)=ci1ix,同理设 g(x)=di1ix,其中 ci,di 均可背包求出。

那么 h=(fg)=fggfg2,但直接带入 x=1 会有收敛性的问题。分子分母同乘 1x,即令 f(x)f(x)(x1)=c1+i1ci(1x)1ixg 同理,则 f(1)=c1g(1)=d1,答案即为

h(1)=f(1)g(1)g(1)f(1)g(1)2=i1cid1dic1d12(i1)

上述讨论在 pipipi 时进行,实现上不能先进行,需要稍加修改。


[PKUSC2018]神仙的游戏

转化成周期之后,等价于判断是否存在两个不同字符距离为 k 的倍数。翻转数组后 NTT 求出所有距离即可。

04.21

vp 联合省选 Day2,不知道为什么 T1 做了很久。最后挂了。注意模数。

[PKUSC2018]主斗地

大搜索。没有 3 状态数不多。然后搜用了多少三带四带,贪心打剩下的牌。


CF1408E Avoid Rainbow Cycles

把集合建点,若数 x 存在于集合 y 中则 x,y 连边。则题中彩虹环对应新图上的环,求最大生成树。


「2022-02-04 省选模拟赛」游戏

寒假的学习笔记

「2022-02-06 省选模拟赛」A

寒假的学习笔记

CF762F Tree nesting

寒假的学习笔记

04.22

「WC2018」通道 (tunnel)

第一棵树边分治,第二棵树上建虚树,dp 剩下权值的最大值。具体地,类似树上直径的结论,每个点的最优决策点必定为两端点,且可以合并。转移直接枚举合并方式。

也可以点分治,每次选两个大小最小的子树合并。


CF868E Policeman and a Tree

寒假的学习笔记


[BalticOI 2021 Day2] The short shank

考虑能传染到每个点的第一个点 pi,则对于两个本不会造反的点 i,j[pi,i][pj,j] 包含或不交。对每个点 v,找到最小的包含它的点 u 连边,形成一棵树。则阻断一个点相当于减去树上一条到根的路径。即选 D 条路径使权值和最大。长剖。


CF526G Spiders Evil Plan

y 条路径等价于 2y 条从叶子到根的路径。显然要以直径两端点为根。长剖,处理每条长链的优先级。为了把 x 加入连通块,有两种决策:

  • 删去最短的长链,连上 x
  • 删去 x 往上跳到的第一条长链,把那条长链改成连向 x

倍增优化。


「NOI2018」冒泡排序

好排列等价于不存在长度超过 2 的下降子序列,我只有一个非常不严谨的感性证明。先不考虑字典序的限制,总方案数怎么求。设 fi,j 表示填了 i 个数,最大值为 j 的方案数。转移考虑末尾新加一个数 x

  • x<j,则 x 必须是未出现过的数中最小的;
  • x>j,随意;

于是 fi,jfi+1,kkj),即 fi,j=k=1jfi1,k=fi1,j+fi,j1,转化为网格图上走路,注意到 ij,于是 fn,n=Cat(n)

对于字典序的限制,枚举前 i1 位相同,第 i 位大于。记 m=max(,ai),则相当于从 (ni+1,nm1) 走到 (n,n),依然搬上卡特兰数即可 O(1) 计算。

04.23

LOJ #6274. 数字

先考虑判断能否存在 xory=Txandy=S。设 fi,lx,rx,ly,ry 表示从高到低考虑到第 i 位,是否大于 Lx,是否小于 Rx,是否大于 Ly,是否小于 Ry。把这个 dp 数组压成状态,gi,S 表示从高到低考虑到第 i 位,f 状态(合法性)为 S 的方案数。枚举当前位填什么转移。状态数 216×60


LOJ #6497. 「雅礼集训 2018 Day1」图

fi,j,k,l 表示前 i 个点,路径长度奇偶性为 j,奇黑个数、奇白个数。设加入一个新白点,黑点同理:

  • k=0,则随意连边,fi+1,j1,k,12ifi,j,k,l

  • k>0,可以选择钦定/不钦定一个奇黑向其连边,于是新点作为奇偶的方案数应该是相等的。

注意到我们只关心是否存在奇黑、奇白,后两维只需记 0/1

据此转移即可。

posted @   Aphrosia  阅读(153)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示