数学部分做题记录
I. [ARC152C] Pivot
神仙题。
II. CF1792E Divisors and Table
III. CF1763D Valid Bitonic Permutations
IV. P6736 「Wdsr-2」白泽教育
注意到 \(n\in \{1,2,3\}\)。
- \(n=1\):
即 \(a\uparrow^1 x=a^x\equiv b\pmod p\),这是一个平凡的 BSGS 问题。
- \(n=2\):
我们有
根据 CF906D 的经典结论,当 \(x\ge r=\Theta(\log p)\) 时幂塔在模 \(p\) 意义下结果不变,所以直接做就可以了。
- \(n=3\):
我们有
同 \(n=2\) 的情况,迭代次数最多只会是 \(4\),直接做就好了。
V. P9405 [POI 2020/2021 R3] 星间旅行
神仙题。
VI. P5598 【XR-4】混乱度
神仙题。
VII. P3705 [SDOI2017] 新生舞会
显然的 0/1 分数优化,二分答案后直接跑费用流即可。我也不知道为什么能过。
VIII. P5516 [MtOI2019] 小铃的烦恼
神仙题。
IX. P3830 [SHOI2012] 随机树
神仙题。
X. CF1830C Hyperregular Bracket Strings
很厉害的题。
XI. UVA10652 Board Wrapping
凸包板子题。只需要知道向量旋转的结论就可以了。
XII. CF1967B2 Reverse Card (Hard Version)
尺子姐姐!/se
不妨套路地设 \(\gcd(a,b)=g\),\(a=gx\),\(b=gy\)。
引理
\[x^2\lt n,y^2\lt m \]证明
题目条件化为 \(x+y\mid gy\)。由于 \(\gcd(x+y,y)=\gcd(x,y)=1\),所以 \(x+y\mid g\)。
注意到 \(x+y\lt g\),而 \(g=\dfrac{a}{x}\le \dfrac{n}{x}\),即得 \(x^2\lt n\)。\(y\) 的讨论是对称的。
注意到引理,我们直接枚举互素数对 \((x,y)\),由于 \(a=gx\le n\),\(b=gy\le m\),所以 \(g\le \min\left(\dfrac{n}{x},\dfrac{m}{y}\right)\);又 \(x+y\mid g\),所以除以 \(x+y\) 后下取整即可。
时间复杂度 \(\Theta(n+m)\)。
XIII. P6835 [Cnoi2020] 线形生物
神题,可以加深对数学期望的了解。
XIV. CF1967C Fenwick Tree
尺子姐姐!!/se
注意到树高最多为 \(\Theta(\log n)\),不难想到维护每一个 \(i\) 对其祖先的贡献。
发现做 \(k\) 次 Fenwick Sum,对应链上的深度差为 \(d\) 的节点中,儿子对祖先的贡献为 \(\displaystyle{d+k-1\choose k-1}\)。直接减去即可。
时间复杂度 \(\Theta(n\log n)\)。
XV. CF113D Museum
设 \(f(i,j)\) 为 A 在 \(i\),B 在 \(j\) 的期望次数。由于终态 \((i,i)\) 只会出现 \(\{0,1\}\) 次,所以这里期望等于概率。
我们有显然的转移方程:
额外地,如果 \((y,w)\) 是起点,那么 \(f(y,w)\) 的期望值还需要额外加 \(1\),理由显然。
时间复杂度 \(\Theta(n^6)\)。代入 \(n=22\) 得到 \(1.13\times 10^8\),精细实现应该是可以过的。
XVI. P3599 Koishi Loves Construction
见非传统题做题记录 Ett。
XVII. [ABC322G] Two Kinds of Base
神仙题。
XVIII. CF632E Thief in a Shop
XIX. CF1548C The Three Little Pigs
XX. P4173 残缺的字符串
XXI. [ABC307Ex] Marquee
XXII. P4448 [AHOI2018] 球球的排列
XXIII. [ABC291G] OR Sum
XXIV. P3412 仓鼠找sugar II
XXV. P4609 [FJOI2016] 建筑师
XXVI. [ABC321G] Electric Circuit
XXVII. [ARC105F] Lights Out on Connected Graph
XXVIII. P6478 [NOI Online #2 提高组] 游戏
XXIX. P2953 [USACO09OPEN] Cow Digit Game S
见博弈论做题记录 I。
XXX. P10501 Cutting Game
见博弈论做题记录 II。
XXXI. [ARC168B] Arbitrary Nim
见博弈论做题记录 III。
XXXII. P4841 [集训队作业2013] 城市规划
XXXIII. [ABC327G] Many Good Tuple Problems
首先题意转化为求 \(n\) 点 \(m\) 边的有标号二分图(可以有重边)数量。
套路地设 \(n\) 点 \(m\) 边简单二分图(染色方式不同算多种)的数量为 \(f(n,m)\)。则枚举左部点数量,我们得到
套路地设 \(n\) 点 \(m\) 边的连通简单二分图(染色方式不同算多种,但显然只有两种染色方式)的数量为 \(g(n,m)\)。则枚举 \(1\) 号点所在连通块,我们得到
边界为 \(g(1,0)=1\)。
不套路地设 \(n\) 点 \(m\) 边的简单二分图的数量(染色方式不同算一种)的数量为 \(h(n,m)\),套路地枚举 \(1\) 所在连通块,我们得到
为什么要除以 \(2\):每种连通二分图在 \(g\) 中被计算了两次。
枚举去重后的边数 \(M\),则贡献为 \(h(n,M)\) 乘以 \(m\) 条边中不同元素个数为 \(M\) 的方案数。
转化为将 \(m\) 个有标号球放进 \(M\) 个有标号盒子中,且没有空盒子的方案数。
受到十二重计数法的启发,套路地枚举空盒子数量 \(i\),容斥(二项式反演)即可;所以就是
即为答案。
XXXIV. P10506 魔法珠
见博弈论做题记录 IV。
XXXV. P6487 [COCI2010-2011#4] HRPA
见博弈论做题记录 V。
XXXVI. P2148 [SDOI2009] E&D
见博弈论做题记录 VI。
XXXVII. [ABC212H] Nim Counting
XXXVIII. CF914G Sum the Fibonacci
给定长度为 \(n\) 的数组 \(s\)。定义五元组 \((a,b,c,d,e)\) 是好的当且仅当:
- \(1\le a,b,c,d,e\le n\);
- \((s_a\operatorname{or}s_b)\operatorname{and}s_c\operatorname{and}(s_d \operatorname{xor} s_e)=2^i,i\in \mathbb{Z}\);
- \(s_a\operatorname{and}s_b=0\)。
对于所有好的五元组 \((a,b,c,d,e)\),求出 \(f(s_a\operatorname{or}s_b)\times f(s_c)\times f(s_d \operatorname{xor} s_e)\) 的和。对 \((10^9+7)\) 取模。
其中 \(f\) 为 Fibonacci 数列,满足 \(f_0=0,f_1=1,f_i=f_{i-1}+f_{i-2}\)。\(\mathrm{and},\mathrm{or},\mathrm{xor}\) 分别代表按位与,按位或,按位异或运算。
\(1\le n \le 10^6\),\(0\le s_i \lt 2^{17}\)。
XXXIX. [ABC137F] Polynomial Construction
XL. P5387 [Cnoi2019] 人形演舞
XLI. P7575 「PMOI-3」公约数
题目中给出的形式不方便反演。不妨先考虑一个计数 dp。
设 \(f(i,j)\) 为考虑了前 \(i\) 个数,其中第 \(i\) 个数是 \(j\) 的合法方案数。
初值:\(f(1,j)=[x_1\mid j]\)。
转移:
直接开始莫反。
注意到这是一个 Dirichlet 前/后缀和的形式,我们在 dp 时维护它即可。时间复杂度 \(\Theta(m\log m\log \log m)\)。
XLII. P8292 [省选联考 2022] 卡牌
XLIII. [ABC293F] Zero or One
XLIV. [AGC029D] Grid game
XLV. CF449D Jzzhu and Numbers
XLVI. [ABC244Ex] Linear Maximization
XLVII. P3309 [SDOI2014] 向量集
XLVIII. [ABC288G] 3^N Minesweeper
XLIX. P7930 [COCI2021-2022#1] Set
L. P4221 [WC2018] 州区划分
LI. P6570 [NOI Online #3 提高组] 优秀子序列
LII. CF1096G Lucky Tickets
LIII. P5330 [SNOI2019] 数论
LIV. P10075 [GDKOI2024 普及组] 切割
LV. [ARC122E] Increasing LCMs
LVI. [ARC179C] Beware of Overflow
LVII. P6089 [JSOI2015] 非诚勿扰
LVIII. P10499 开关问题
LIX. P1737 [NOI2016] 旷野大计算
LX. [AGC027D] Modulo Matrix
LXI. P4284 [SHOI2014] 概率充电器
LXII. [ABC341G] Highest Ratio
LXIII. P4827 [国家集训队] Crash 的文明世界
注意到
不妨设
状态转移是平凡的:
这样一来,对于根,答案就是
考虑换根。设 \(g(u;i)\) 为 \(u\) 为根时候的 \(f(u;i)\)。
时间复杂度 \(\Theta(nk)\)。
LXIX. [ABC213H] Stroll
套路地设 \(f(u,t)\) 为走到 \(u\) 时已经走过长度为 \(t\) 的路程的方案数。
设 \([z^i]F_u(z)=f(u,i)\)。
我们有显然的转移:
分治 NTT 即可,时间复杂度 \(\Theta(n^2T\log T)\)。
LXX. P5437 【XR-2】约定
\(n\) 个点的无向图有 \(n^{n-2}\) 棵生成树,每棵生成树有 \((n-1)\) 条边,所以每条边的出现次数为 \(\displaystyle \frac{(n-1)n^{n-2}}{\frac{n(n-1)}{2}}=2n^{n-3}\)。
所以答案就是
考虑怎么快速算右边。注意到,记 \(\displaystyle f(n)=\sum_{i=1}^n\sum_{j=1}^n (i+j)^k\),则原式的两倍等于 \(\displaystyle f(n)-\sum_{i=1}^n(i+i)^k\)。于是我们只需要考虑 \(f(n)\)。
注意到,\(f(n)\) 的差分是 \((k+1)\) 次函数,从而 \(f(n)\) 是 \((k+2)\) 次函数,可以 \(\Theta(k)\) 插出。对于右边也是同理的。
所以我们在 \(\Theta(k)\) 内解决了本题。
LXXI. P5442 【XR-2】约定(加强版)
LXXII. P5689 [CSP-S2019 江西] 多叉堆
LXXIII. CF1842H Tenzing and Random Real Numbers
LXXIV. [ABL-F] Heights and Pairs
不会简单容斥/kk
设 \(P_n\) 为用 \(2n\) 个数构成完美匹配的方案数。我们得到,\(\displaystyle P(n)=\frac{(2n)!}{n!2^n}\)。
设 \(f_i\) 为至少有 \(i\) 个相同对(其他任意)的方案数,那么答案就是 \(\displaystyle \sum_{i=0}^n (-1)^i f_i\)。
那么,设 \(f'_i\) 为选出 \(i\) 个相同对的方案数,则有 \(f_i=f_i'\cdot P(n-i)\)。
考虑如何求出 \(f'_i\)。我们显然地有
这显然是一个多项式卷积的形式,套路地设 \(\displaystyle F_i(z)=\sum_{i=0}^{+\infty}{\mathrm{cnt}_i\choose 2i}P(i)\cdot z\),将 \(n\) 个 \(F_i\) 卷起来就可以了。
每次选取最小的两个多项式卷起来,可以证明时间复杂度是 \(\Theta(n\log^2 n)\)。
LXXV. CF1585F Non-equal Neighbours
神仙容斥。
正着做反着做都不好做,只好容斥了。
套路地,设 \(f(i)\) 为至少有 \(i\) 个 bad position 的方案数。定义 \(f(i,j)\) 为前 \(i\) 个元素分为 \(j\) 段的方案数。显然,\(f(i)=f(n,n-i)\)。
考虑怎么算 \(f(n,i)\)。显然一段内的方案数就是其最小值(记为 \(\mathrm{mn}(l,r)\))。那么,显然有
注意到,容斥中,乘上 \(1/-1\) 只和 \(f(i)\) 中 \(i\) 的奇偶有关,所以可以直接缩减状态:\(f(i,0/1)\)(其中 \(j\equiv 0/1\pmod 2\))
考虑单调栈,记 \(pos\) 为第一个小于 \(i\) 的位置。那么,
不妨记 \(\displaystyle g(i,j)=\sum_{k=1}^i f(k,j)\)。那么,
时间复杂度 \(\Theta(n)\)。
LXXVI. CF1556F Sports Betting
LXXVII. CF1848F Vika and Wiki [duel]
LXXVIII. Subsequences Galore [duel]
LXXIX. CF296B Yaroslav and Two Strings [duel]
LXXX. CF1608D Dominoes [duel]
LXXXI. P10580 [蓝桥杯 2024 国 A] gcd 与 lcm
建议评黄。
每个素因子是独立的,可以分开考虑。以下均基于素因子 \(p\) 讨论。
设 \(\gcd\) 中,\(p\) 的指数为 \(a\);\(\mathrm{lcm}\) 中,\(p\) 的指数为 \(b\)。
题目保证了有解,所以 \(a\le b\)。
当 \(a\lt b\) 时,序列中,至少一个位置指数为 \(a\),至少一个位置指数为 \(b\)。
正着做不好做,考虑容斥。拿全部方案,减去钦定没有 \(a\) 或没有 \(b\) 的方案,加上钦定两个都没有的方案即可。
\(a=b\) 是平凡的。
时间复杂度为 \(\Theta(Q\sqrt V)\),其中 \(\sqrt V\) 花费在分解素因子上。
LXXXII. CF60D Savior
考虑 \(i\) 能向 \(j\) 传 Laugh 的条件。将能够传播 Laugh 的草坪之间连一条无向边,答案就是连通块数量。
考虑勾股数组的构造。
- \(a=m^2-n^2\)
- \(b=2mn\)
- \(c=m^2+n^2\)
其中 \(m\gt n\),且 \(m,n\) 一奇一偶。
枚举 \(m,n\) 即可,时间复杂度 \(\Theta(V)\)。
LXXXIII. CF1119H Triple
题解。
LXXXIV. P1520 因式分解
题解。
LXXXV. P5308 [COCI2018-2019#4] Akvizna
对于二维的情况,DP 方程是显然的:
考虑到 \(f\) 的凸性,考虑 wqs 二分。那么,就是
考虑决策单调性优化。
首先讨论:我们在 \(\mathrm{cnt}\ge k\) 时更新 \(r\gets \mathrm{mid}\)。这意味着,我们需要让能够分成的段数尽量多。
考虑 \(j_1\lt j_2\) 这两个决策点,那么就有 \(f(j_2)+\dfrac{i-j_2}{n-j_2}\ge f(j_1)+\dfrac{i-j_1}{n-j_1}\)。
进行 Dirty work。记 \(F(j)=f(j)-\dfrac{j}{n-j}\)。
化简得到
于是
于是
- \(Y(i)=F(i)=f(j)-\dfrac{j}{n-j}\);
- \(X(i)=\dfrac{1}{n-i}\)。
这就是【模板】斜率优化 DP。
LXXXVI. Counting Graphs
三 合 一
在本题中,多项式乘法是不必要的,只需要实现 \(\Theta(n^2)\) 的算法即可。
I. 有标号无向连通图计数
算法 \(1\)
设 \(f(n)\) 为 \(n\) 个节点的无向图个数,\(g(n)\) 为 \(n\) 个节点的无向连通图个数。
显然 \(f(n)=2^{\frac{n(n-1)}{2}}\)。
拿所有方案数减去不合法的方案数。枚举与 \(1\) 号节点与多少点在一个联通块内。即有
注意到这是一个卷积的形式,即可在 \(\Theta(n\log n)\) 内解决本题,即 城市规划。
算法 \(2\)
设 \(f(n)\) 为 \(n\) 个节点的无向图个数,\(g(n)\) 为 \(n\) 个节点的无向连通图个数。\(F(z),G(z)\) 为对应的 EGF。
我们有:
所以
II. 有标号无向 Euler 图计数
设 \(f(n)\) 为 \(n\) 个节点的无向图(满足每个点度数都是偶数)个数,\(g(n)\) 为 \(n\) 个节点的 Euler 图个数。
显然 \(f(n)=2^{{n-1\choose 2}}\)。
理由:第 \(n\) 个点只会与前 \((n-1)\) 个点组成的任意图中度数为奇数的点连边。(想一想,为什么这样第 \(n\) 个点的度数就一定是偶数?)
接下来的推导就同 I. 了。
III. 有标号二分图计数
算法 \(1\)
算法 \(2\)
考虑 \(n\) 个节点的图,对每个点进行黑白染色,满足同色点之间无边的方案数为 \(f(n)\)。显然为
考虑 \(n\) 个节点的连通二分图的方案数 \(g(n)\),设出 EGF,有
(为什么要乘以 \(2\):注意到是黑白染色,一个二分图对应两种染色方案。)
那么,\(G(z)=\dfrac{1}{2}\ln F(z)\)。
于是,设 \(n\) 个节点的二分图方案数 \(h(n)\),我们就有
LXXXVII. P4617 [COCI2017-2018#5] Planinarenje
二分图博弈的模型。
LXXXVIII. [ABC276G] Count Sequences
解法 \(1\)
套路地考虑 GF。那么有
对应到 GF 上,就是
所以,\(\displaystyle F_n(z)=\frac{z^{n-1}}{(1-z^3)^{n-1}(1-z)}(1+z)^{n-1}\)。
不妨再卷一个 \(\dfrac{1}{1-z}\)(前缀和),就化为求 \([z^m]\dfrac{z^{n-1}}{(1-z^3)^{n-1}(1-z)^{2}}(1+z)^{n-1}\),也就是求 \([z^{m-n+1}]\dfrac{(1+z)^{n-1}}{(1-z)^{2}(1-z^3)^{n-1}}\)。
换个角度思考,\(\dfrac{(1+z)^{n-1}}{(1-z)^2}\) 就是 \((1+z)^{n-1}\) 的二阶前缀和,可以线性求出。
而,
也是好求的。综上,我们严格线性地完成了本题。
LXXXIX. [ABC295E] Kth Number
注意到,\(\displaystyle \mathbb{E}[X]=\sum_i \mathrm{Pr}(X\ge i)\)。所以只需要算出 \(\mathrm{kth}\ge i\) 的方案数。
想要让 \(\mathrm{kth}\ge i\),也就是 \(\ge i\) 的数需要有至少 \(n-k+1\) 个。
错解
那么,设需要补至少 \(x\) 个 \(\ge i\) 的数,方案数就是 \((m-i+1)^x\cdot m^{\mathrm{cnt_0}-x}\)。然后求个和就行了。
Bug
该式子的意义为“钦定前 \(x\) 个 \(0\) \(\ge m\),剩下的随便选”,但是显然这是不对的。
那么,只需要枚举 \(j\ge x\),然后从 \(x\) 个里面选出 \(j\) 个 \(\ge i\),剩下的全部 \(\lt i\) 即可。时间复杂度 \(\Theta(nm)\)。
XC.
求出
的封闭形式。
打表发现,\(f_n=2n+1\)。
XCI. CF1109D Sasha and Interesting Fact from Graph Theory
算法 \(1\)
考虑枚举 \((a,b)\) 路径上(不含两端)有多少个点,我们有
其中 \(F(i)\) 表示有多少种方式构造一棵 \(n\) 个点的树,使得 \(i\) 个关键点不在同一棵树内。
由广义 Cayley 定理得,\(F(i)=i\cdot {n-i-1}\)。
所以答案为
特判 \(i=n-2\) 的情况即可,时间复杂度 \(\Theta(n\log n)\)。
算法 \(2\)
考虑枚举 \((a,b)\) 路径上(不含两端)有多少个点,我们有
XCII. P3166 [CQOI2014] 数三角形
只需要拿选出三个不同点的方案数减去三点共线的方案数。
平凡的,略去斜率不存在或者为 \(0\) 的情况。不妨只考虑斜率 \(\gt 0\) 的情况,最终再乘以 \(2\)。
由 P1447 [NOI2010] 能量采集 的套路可知,设两点横纵坐标差值为 \(\Delta x,\Delta y\),它们之间有 \(\gcd(\Delta x,\Delta y)-1\) 个点。所以我们就要算
由于本题中 \(n,m\le 1\,000\),所以做完了。时间复杂度 \(\Theta(nm)\)。
XCIII. P10636 BZOJ3518 点组计数
其实就是 XCII 的加强版。
平凡的,略去斜率不存在或者为 \(0\) 的情况。不妨只考虑斜率 \(\gt 0\) 的情况,最终再乘以 \(2\)。
由 P1447 [NOI2010] 能量采集 的套路可知,设两点横纵坐标差值为 \(\Delta x,\Delta y\),它们之间有 \(\gcd(\Delta x,\Delta y)-1\) 个点。所以我们就要算
在 P3166 中我们可以暴力计算,但是本题中我们需要更优的做法。
首先将和式拆开,变成
对于右边,显然等于
对于左边,显然等于
然后你发现这三个都是典题。不过我们不妨推一下:(默认 \(n\le m\))
我们记 \(s(n)=\sum_{i=1}^n i\)。
然后就做完了,利用线性筛,时间复杂度为 \(\Theta(n)\)。不理解为什么才开到 \(5\times 10^4\)。
Bonus:考虑 \(n,m\le 10^{10}\) 的时候如何做。