做题记录(Sep.)

八月做题记录

9.1

  • 开学了。

P7124

可以通过 dfn 序转化成求一堆区间外的集合。考虑类似 CDQ 的东西,取一个中间值,子树对应区间整体在左或在右的递归处理;跨过中间的,由于 dfn 序的性质,显然互相包含,那么可以双指针往中间靠拢。那么就做完了。


P3809*

SA 板子。

9.2

P2178

经典题目,SA 的应用,height 数组与并查集的结合。


P1117

参考 OI-wiki 上讲的,搞出来以一个位置开头和结尾的连续两个重复子串个数,拼起来就行。


P4173*

带通配符的单模式串匹配板子。

9.3

AT_agc050_a

我不会 Ad-hoc。


P9445

P4173 的二维版本,可以把模式矩阵的列用通配符补齐,然后两个都拉成序列再跑 P4173。


P2260

拆拆拆,拆成几个整除分块,其中有一个二维的,同理推一下式子即可。


CF338D

写神人错误虚空调试一下午/ll。

把所有的 \(\gcd(x,y+i-1)=a_i\) 转换成 \(x=k_1\operatorname{lcm}(a_1,a_2,\dots,a_k)\)\(y\equiv 1-i\pmod {a_i}\),后者 EXCRT 一下,合并成 \(y=k_2\operatorname{lcm}(a_1,a_2,\dots,a_k)+y_0\)。然后就是要求 \(\gcd(x,y+i-1)=a_i\),发现 \(k_1=1\) 是最优的,限制最少,而 \(k_2\) 和这个没关系,所以取零就行,那验证一下就行。

9.4

P5491*

二次剩余板子。


P5598*

Lucas 定理好题啊。


P6610*

二次剩余应用题。首先可以把 \(P\) 拆成若干个奇素数 \(p\),然后变成若干个 \(a^2 + b^2\equiv x\pmod p\),那么可以把这些用 CRT 合起来,方案数相乘即可。

那么现在考虑单个式子。如果 \(\genfrac{(}{)}{}{0}{x}{p}=1\),说明 \(x\) 是二次剩余,那么对于 \(a^2=x\)\(a\) 有两种取值,同理可得当 \(\genfrac(){}{0}{x}{p}=0\)\(a\) 有一种取值,\(\genfrac(){}{0}{x}{p}=-1\) 时没有取值。发现取值数量恰好就是 \(\genfrac(){}{0}{x}{p}+1\)。那么我们令 \(i=a^2,j=b^2\),就有 \(i+j\equiv x\pmod p\),而方案数就是

\[\begin{aligned} &\sum_{i+j\equiv x\pmod p}(\genfrac(){}{0}{i}{p}+1)(\genfrac(){}{0}{j}{p}+1)\\ =\ &\sum_{i+j\equiv x\pmod p}(\genfrac(){}{0}{i}{p}\genfrac(){}{0}{j}{p}+\genfrac(){}{0}{i}{p}+\genfrac(){}{0}{j}{p}+1)\\ \end{aligned} \]

那么根据勒让德符号的完全积性以及二次剩余在 \(1\sim p-1\) 中占一半的性质,可以写成:

\[\begin{aligned} =\ &p+\sum_{i+j\equiv x\pmod p}\genfrac(){}{0}{ij}{p}\\ =\ &p+\sum_{i=0}^{p-1}\genfrac(){}{0}{i(x-i)}{p}\\ =\ &p+\sum_{i=1}^{p-1}\genfrac(){}{0}{\frac{x}{i}-1}{p} \end{aligned} \]

分情况讨论,如果 \(x=0\),则答案为 \(p-(p-1)\genfrac(){}{0}{-1}{p}\),否则,\(\frac{x}{i}-1\) 能取到 \(0\sim p-2\) 的所有值,答案为 \(p-\genfrac(){}{0}{p-1}{p}\) 也就是 \(p-\genfrac(){}{0}{-1}{p}\)。把所有这个乘起来就行。

9.5

AT_abc229

A

赛时被自己骗了一小时。上来发现构造形如 ARAR...ARARCRC...RCRC 可以等于贡献 A 的数量乘 C 的数量的次数。然后就开始以这个思路拼,结果被卡了。最后验证发现,如 \(X=597\) 等情况,没有办法压下 \(100\) 个字符。

寻找操作的本质,可以发现 R 其实是不会动的,所以实际上就是忽视 R 后相邻的 AC 交换位置。那么把 A 当作 \(1\),把 C 当成 \(0\),其实答案就是逆序对数。我的具体构造方法:\(50\) 个偶数位塞 R,剩下的前一半塞 A,后一半塞 C,初始逆序对数为 \(625\),多了就把最后一个能往后换的 A 往后换就行。

C

这是 C 啊,显然奇偶交替时下取整减少的最多,让两头的尽量大加的最少。所以枚举两头都奇都偶和一奇一偶的情况就没了。

9.6

P4345

用 Lucas 定理拆成 \(p\) 进制然后数位 DP。


P17290

略。


P17313

模拟赛时读错题 3h,到结束都以为自己没救了。发现 \(c_i\) 较小,挪动主字符的周期只有 \(T=60\),可以直接 DP。


P9981

先建返图跑 DAG 求出最长路,然后按最长路分层。考虑从小到大逐层求出答案。对于每一层,考虑每个点和上一层的连边,以这条边的边权为第一关键字,连向的点的排名为第二关键字,排序得到这一层的排名即可。

9.7

P17307

好聪明的题啊。见题解。


AT_abc335_g

阶的应用,有结论就是题目等价于求有多少对 \(i,j\) 满足 \(\delta_p(a_i)|\delta_p(a_j)\)


GYM101741F & QOJ #11741

假装我过了。

9.8

P10074

首先分析什么是最劣的,那就是每次新选一个打都打到了血量最高的那个。考虑他的策略,每次选定一个血量为 \(x\) 的怪物,从血量高的到血量低的,依次打 \(x\) 次,直到打死,然后再选一个血量更小或相等的,继续如法炮制。

为什么不会出现前面打过的怪血量更低更好清的情况?那不如先选这个血量高的怪,所以在 DP 时会考虑。

状态 \(f_{i,j}\) 表示第 \(i\) 次选择怪物,打的是血量第 \(j\) 大的那只。显然有转移:

\[f_{i,j}=\min_{k<j}\{f_{i-1,k}+(j-k)a_j\} \]

可惜是 \(O(mn^2)\) 的,所以斜率优化掉最里层的 \(n\) 即可。

9.9

  • 打模拟赛。

P5468 & P6302

写的勾石代码,调了一晚上 /ll。

把每辆车按出发时间排序。定义 \(f_i\) 为到达第 \(i\) 条线路的终点时的烦躁值最小是多少。可以斜率优化,用一个优先队列把处理完的线路存起来,当现在考虑的线路出发时间大于等于这些线路的到达时间时,把他们加入凸包。

9.10

  • 打 ICPC 重现赛。

P4072*

四边形不等式优化 DP 板子。拆一拆方差可以发现只需要最小化 \(\sum x^2\)\(x\) 是每段和。

9.11

P3571*

斜率不止能优化 DP。


CF833B

显然四边形不等式优化,中间用类似莫队的东西暴力维护不同颜色数。


P13214

爽了,第一次独立做黑。我的题解


CF321E

依旧四边形不等式优化。

9.12

  • 打模拟赛。

AT_abc251_d

欸,我怎么八百年前做过。众所周知 \(1,2,4,\cdots\) 可以表示所有数,但是只能选三个数的话,那就让所有数在某个进制下不超过 \(3\) 位。那不就是 \(100\) 进制吗,刚好 \(n=300\),做完了。


CF2255B

何 *1600,改成 *2200 吧。注意到 \(0/1\) 的段数不会改变,所以统计一下个数和段数然后插板。

9.14

P17198

这不黑?首先定义 \(l_i,r_i\)\(A,B\)\((i,i+1)\)\(A\) 最左和最右能到哪里,那么可以发现 \(B\) 最右能到 \(r_i+1\),所以对于每次询问,\(A\) 最左能到 \(\min_{i=a}^{b-1} l_i\)\(B\) 最右能到 \(1 + \max_{i=a}^{b-1} r_i\),只要这个区间包含 \((c,d)\),那就是 YES。怎么求 \(l_i,r_i\)?令 \(p_i,q_i\) 为走一次跳板最左或最右能到哪里,那么对于每个 \(i\),显然可以走到 \(\left[p_i,q_{i+1}-1\right]\),所以连边(线段树优化建图)。然后跑 Tarjan 缩点后 Topsort 求出 \(l_i,r_i\) 即可。最后用 ST 表维护询问。


P10633

第一次见这个 trick,见题解。


P3515

四边形不等式优化 DP,见题解。

9.15

P1501

基础 LCT。


AT_fps_24_g

可以看作带删除的的完全背包。由于完全背包没有顺序,可以直接当作最后一次加入的东西然后反着撤销。

9.16

P14467

倍增跳。


CF1137F

LCT。为了方便,每次把最大值变成树根,那树根就是最后删掉的。考虑转化问题,记录每个点子树内的最大值,那么对于最大值不同的,最大值更大的后删。相同的复杂一点,对于树上每一颗 splay,维护一条子树最大值相同的链,更靠上(splay 里 右子树 siz 更大)的后删。对于查询排名,用一个树状数组维护每种最大值有几个点,查询前缀和可知子树最大值更小的有多少。对于子树最大值相同的,也是 splay 右子树的 siz 个先删。

9.17

P17471

题解


AT_agc013_e

暴力 DP 很好想,看到平方想到什么?直接一手管道取珠。用组合意义重新 DP 并用矩阵加速。

9.18

CF2109C(1~3)

惊为天人的 Ad-hoc。


QOJ #20029

首先很好想到暴力 DP 和前缀和优化。那么令 \(x_i\)\(a_i-b_i\) 的前缀和,\(y_i\)\(a_i-c_i\) 的前缀和。可以发现如果 \(j<i,x_j\le x_i,y_j \le y_i\),就可以使用转移 \(f_i=f_j+i-j\),否则只能 \(f_i=f_j\),是个三维偏序,可以在 CDQ 时维护 DP。


AT_fps_24_a

题解


AT_fps_24_l

一个含 \(n\) 个点的轮换的 EGF 是 \(\sum\frac{(n-1)!}{n!}x^n\),这个题本质上是求没有轮换大小 \(\le2\) 的置换数量,把轮换的 EGF 的前几项去掉做 exp 即可。

posted @ 2026-09-01 15:21  wo2011  阅读(4)  评论(0)    收藏  举报