Loading

做题笔记(五)

省选前做题记录,尽量总结自己除了作业题外的做题记录。


把原式的函数写成组合数是 \(\binom{i}{j}(j-1)! \bmod j\)

那么有个威尔逊定理,\((j-1)!\bmod j\)\(j\) 为素数的时候是 \(-1\),否则,在 \(j \neq 4\) 的时候为 \(0\)

素数的情况用卢卡斯做下去,最后模拟埃氏筛即可。

知识点是欧拉反演和皮克定理。

欧拉反演:\(n = \sum\limits_{d|n}\varphi(d)\)

皮克定理:基础版本是一个多边形内的格点数量等于内部格点数量加边上格点数量的一半再减一。

这个题推广到面积,就是总面积等于整块的面积加上边上经过的格子数量乘二,知二求一。

还以为是什么排列问题,结果直接容斥,二项式反演一下就好了。

这种问题就是一位位确定,想清楚方案数就好了。

线性规划对偶题。

FFT 优化字符串匹配,核心在于构造函数 \(ab(a-b)^2\) 来判断 \(a,b\) 是否相同。

height 数组结合并查集的使用。

考虑枚举中间那个最小值,左右只需要求出最大值小于这个最小值的区间数量,和最大值的和。

因为左右的区间和中间相交则答案为 \(0\),所以不影响答案,树状数组加单调栈即可。

DAG 最长反链模板题。根据 Dilworth 定理,最长反链等于最小链覆盖,用传递闭包转化成不交的最小链覆盖。

每个点拆成入点和出点,跑一个最大流即可。

这种对每个长度求解的问题可以设置观察点,做到 \(O(n\log n)\)


下面是 data structure 合集部分:

相遇分为相向和同向,两个相遇的点一定是相邻的点。

枚举相邻的点对和相遇的方式,此时发生的概率为其余点都不存在更快相遇的方案,可以用一个 DP 表示,设出 \(f(i,0/1)\) 表示前\(i\) 个点,且第 \(i\) 个点的方向,转移可以写成矩阵的形式,如果按照时间排序,就可以在线段树上单点修改维护 DDP。

先忽略排序的条件,推出式子,分离变量,发现这是可以合并的信息,然后结合平衡树维护。

这种形式先建立虚树,根据题意,每一个颜色都是一个连通块,一个关键点的颜色是扩展到它次数最小的颜色(如有同,取编号最小)。

使用 Dijkstra 转移即可。

唯一难点在第一步,将原序列的删除子串变成删除 \(O(1)\) 个元素,实际上还是一样的思路,关注主要矛盾。

国王只能放白格,一个白格被占领会导致左上或者右下的情况确定,随便拿点啥维护一下二维点对就好了。

首先三维的问题无法思考,将其变成 \(\dfrac{x}{x+y+z},\dfrac{y}{x+y+z}\)

然后一开始我转化成了一个半平面,但是实际上不如凸包,最后利用极角判断点在凸包内即可。

总结是:不会的东西和没接触过的东西少想。

自己一开始列出了几个思考方向:根号分治,\(n^3\) 算法,AC 自动机,然后开始考虑一个字符串怎么被记入,不会做。

换一个表述,一个字符串对询问的贡献,核心考虑拐点,这样就能解决了,也就是直接把贡献放到 AC 自动机上,最后求一次。

\(|a|\times b\) 变成 \(\max(a, -a)\times b\) 后就是 KTT 模板题。

看到区间最大值,想到用分治来刻画,使用 CDQ 分治,这样要解决的问题是一个斜率优化的形式,但是自己追求 \(O(n)\) 的写法调了很久,最后还是用了李超树才通过。

把最小值当作根,那么这个树就是一个堆的结构,考虑每一条边的贡献,显然只要不成环,这些贡献是独立的。

而一个点的父亲只会改成其祖先中的一个,否则一定不优,根据题目给的式子,其一定是根或 \(2^k\) 级祖先。

这种问题一定是钦定一个前缀相同,中间一个数字更小,然后随意。

预处理错排相关问题可以做到 \(O(n^2)\)


下面是 games 部分,对于博弈论题还是很需要注意力的。

混合策略纳什均衡的模板题,首先分析好信任和欺骗对应的代价,然后设出作出决策的概率,按照题意求出纳什均衡点即可。

只需要看两者靠近的过程,回退是没有意义的,考虑模仿操作可以丢给对方一个相同的局面。

这样就变成了 K-Nim 游戏,结论是二进制下每一位为 \(1\) 的个数 \(\bmod (k+1)\)\(0\) 就是先手必败,否则先手必胜。

使用 SG 函数,发现长度对应的 SG 函数似乎只有 \(O(\log V)\) 段,事实如此,打个表即可通过。

单独观察一行,是一个取数游戏,仍然使用 SG 函数,其 SG 值等于 \(\bmod (k+1)\) 后的值,异或起来即可。

然后观察行对行的影响。

\(f_{i,j},g_{i,j}\) 分别表示先手的 \(x=i\),后手的 \(x=j\) 时,先手权值减后手权值的最大(小)值。

转移暴力是 \(O(n^3)\) 的,用双指针就 \(O(n^2)\),唯一难点是细节。

一开始想了很久不会,后来发现 \(K=0\) 的时候答案直接按照奇偶讨论就好了,那么对于 \(K>0\) 的情况也分奇偶就好了。

搞笑题,状态只有 \(495\) 个,直接连边,跑拓扑排序就好了。

主要在于得到重要结论:\(n\) 为奇数或字符串本质不同排列有偶数种时先手必胜。

考虑偶数是因为若能删除一个字符使得自己胜利可以直接删,否则可以把这个塞给后手。

相似的分析方法,得到答案只和奇偶有关,那么用线段树维护必胜必败态即可,设 \(s_i\) 表示后面第一个 \(0\) 的位置在 \(i\) 的时候的前 \(m\) 个元素的必胜必败态,细节多。

考虑直接判答案为 \(len - 1\)\(len - 2\) 的情况,剩下的根据鸽巢原理,\(r-l+1\le 50\),直接 DP。

多个游戏用 DP 组合,这里不需要知道 SG 函数,因为是有顺序的。

游戏内部是 Nim 游戏或者反 Nim 游戏,对着对应的条件优化 DP 即可。

posted @ 2024-12-20 13:16  紊莫  阅读(22)  评论(0)    收藏  举报