2025.10.5 炼石计划 week6 数论 讲课笔记
记录:1,3,2 \(\quad\) 4 \(\quad\) 5(做法二)
题单:
https://www.mxoj.net/training/T1579?groupId=1124&returnUrl=/training/listForGroup?groupId=1124
列表:
- [x] https://www.luogu.com.cn/problem/P11841
- [x] https://www.luogu.com.cn/problem/P9193
- [x] https://www.luogu.com.cn/problem/P5179
- [x] https://www.luogu.com.cn/problem/P5172
- [x] https://www.luogu.com.cn/problem/CF868G
- [x] https://www.luogu.com.cn/problem/AT_agc051_f
- [x] https://www.luogu.com.cn/problem/CF1285F
- [x] https://www.luogu.com.cn/problem/P7575
- [ ] https://uoj.ac/problem/654
- [ ] https://www.luogu.com.cn/problem/P11418
- [ ] https://www.luogu.com.cn/problem/P6610
- [ ] https://www.luogu.com.cn/problem/AT_arc166_f
- [ ] https://www.luogu.com.cn/problem/P8457
- [x] https://www.luogu.com.cn/problem/AT_agc001_f
T7 CF1285F Classical?
显然 \(\forall a,b\in\mathbb N^+\),\(\exists (x\mid a,y\mid b)\),\(\gcd(x,y)=1,\text{lcm}(x,y)=\text{lcm}(a,b)\)(\(\text{lcm}\) 本质为每个质因子幂的指数取最大值,将它归到较大的一侧即可),因此令 \(S=\{d\mid \exists i,d\mid a_i\}\),答案等于 \(\max_{u\in S,v\in S}[\gcd(u,v)=1]uv\)
从大到小扫描 \(S\) 中数,将之前扫到的数保存到一个栈中,设目前扫到 \(x\),栈中第一个和 \(x\) 互质的数为 \(y\),则对于任意栈中 \(y\) 之上的 \(z\),必有 \(y<z<x\),显然 \(z\) 和 \(x\) 及 \(x\) 之后的数匹配一定不如 \(x\times y\),因此 \(z\) 可以弹出,且 \(y\) 和 \(x\) 之后的数匹配一定不如和 \(x\) 匹配,因此 \(y\) 也可以弹出
假如每次恰好弹出最后一个和 \(x\) 互质的数,则时间复杂度是对的,因此转化为:压栈,弹栈,判断栈中是否存在和 \(x\) 互质的数
维护 \(ct_x\) 表示栈中 \(x\) 倍数的数量,令 \(c_x\) 表示 \(x\) 是否在栈中,则栈中和 \(x\) 互质的数量为
在弹栈过程中需要计算其增量
时间复杂度 \(O(\sum d(i))=O(n\log n)\)
T8 P7575 「PMOI-3」公约数
令 \(f_{i,j}\) 表示确定了 \(1\sim i\) 位置,最后一个值为 \(j\) 的方案数,显然 \(f_{1,\ast}=1\),答案为 \(\sum f_{n,\ast}\)
转移为
显然只会影响到 \(x_i\mid j\) 的位置,因此单独提取出来,令 \(g_j=f_{i,j\cdot x_i}\),\(f'_j=f_{i+1,j\cdot x_i}\),其中 \(j\le\left\lfloor\frac m{x_i}\right\rfloor\)
转移变为
莫反得
对 \(g\) 做狄利克雷后缀和得 \(h_d=\sum_{d\mid k}g_k\),从而 \(f_j\gets \sum_{d\mid j} \mu(d)h_d\),令 \(h_d\gets h_d\times \mu(d)\),然后对其做狄利克雷前缀和得 \(f'\)
注意此时除了 \(f'\) 外剩余位置需要清空,为了保证复杂度,显然清空 \(x_{i-1}\mid j\) 的位置即可
时间复杂度 \(O(\sum \frac m{x_i}\ln\ln\frac m{x_i})\),因为 \(x\) 互不相同,因此时间复杂度为 \(O(\sum m\ln m\ln\ln m)\)
exT1 P11846 [USACO25FEB] Transforming Pairs P
显然 \(a,b,c,d\) 同时取相反数,同时交换 \(a,b\) 和 \(c,d\),都不改变答案
当 \(a,b\) 同号(\(0\) 可以看做 \(+\) 也可以看做 \(-\))时,变换为 \(a\ge 0,b\ge 0\),若 \(c<0\) 或 \(d<0\) 则显然不合法,否则形式与弱化版类似,但需要额外处理 \(0\) 的情况:
- 当 \(c\ne d\) 时无需特殊处理
- 当 \(c=d\) 时,下一步操作会将 \(c\) 和 \(d\) 之一变为 \(0\),若辗转相除,则条件是 \(c\bmod d=0\),可以 \((c,d)\to (0,d)\),也可以 \((c,d)\to (d,d)\to (d,0)\),因此 \((a,b)=(d,0)/(0,d)\) 时合法
当 \(a,b\) 异号,\(c,d\) 异号时,若 \(a,c\) 不同号,显然无解(不然一定有一步需要翻转 \(a,b\) 之一的符号,但翻转后无法进行下一次翻转,不可能和 \(c,d\) 相同),\(a,c\) 同号时,假定 \(a>0,b<0\),\(|a|>|b|\),则一定变为 \((a+b,b)\),绝对值的变化为 \((|a|,|b|)\to (|a|-|b|,|b|)\),相当于逆序变换,因此转化为 \((c,-d,a,-b)\) 的子问题
当 \(a,b\) 异号,\(c,d\) 同号时,假定 \(a,c,d>0,b<0\),将两个点 \((a,b)\) 和 \((c,d)\) 放到平面上,每次可以从 \((a,b)\) 走到 \((a+b,b)\) 或 \((a,a+b)\),当 \(a>-b\) 时后者相当于跨越 \(x\) 轴
预处理 \((c,d)\) 的移动路径(\(O(\log V)\) 条与坐标轴平行的线段),\((a,b)\) 移动过程中,枚举求出当前的 \((a,a+b)\) 移到 \((c,d)\) 的哪一段,尝试将两者拼起来,显然时间复杂度 \(O(\log^2 V)\),容易双指针做到 \(O(\log V)\)
总时间复杂度 \(O(q\log V)\)
T14 AT_agc001_f [AGC001F] Wide Swap
令 \(q\) 为 \(p\) 的逆排列,则相当于每次选择 \(q_i\) 和 \(q_{i+1}\),若 \(q_i\ge q_{i+1}+k\) 则交换两者,要求 \(q\) 中 \(1\) 尽量靠前,然后 \(2\) 尽量靠前,依次类推
容易用类似冒泡排序的过程做到 \(O(n^2)\)
考虑用归并排序优化,设目前归并 \([l,M]\) 和 \((M,r]\)
若 \(j\in (M,r]\) 可以放到 \(i\in[l,M]\) 位置之前且字典序更优,则说明 \(\forall x\in [i,j),q_x\ge q_j+k\),因为是归并,因此此时 \((M,j)\) 中的值已经插入 \(i\) 之前,因此上述条件等价于 \(\min a_{i\sim M}\ge q_j+k\),预处理 \([l,M]\) 的后缀 \(\min\) 即可
时间复杂度 \(O(n\log n)\)
T6 AT_agc051_f [AGC051F] rng_58's Last Problem
对于 \(a+b\sqrt 2\),\(a\ge 0,b\ge 0\) 时显然合法
题目保证了不会出现 \(a<0,b<0\)
当 \(a<0,b>0\) 时,尝试对 \(b\) 求出最大的合法的 \(|a|\),\(a>0,b<0\) 时对称
将状态表示为平面上的点,横坐标为沙漏 \(A\) 中上球内质量,纵坐标表示沙漏 \(B\) 中下球内质量,则相当于长方形 \((0\sim 1,0\sim \sqrt 2)\) 中,从 \((0,0)\) 出发,速度为 \((-1/0/1,-1/0/1)\)(不含 \((0,0)\)),遇到边缘时可改变方向,给定一个时间,判断能否使得此时恰好位于边缘上

定理 \(\text 1\):可以转化为 \(a+b\sqrt 2(a\ge 0,b\ge 0)\) 加上若干次只走斜线的
证明:
- 当平移结束位置不是四个顶点时,相当于翻转空的那个沙漏而另一个平方,显然可以把这一步移到开头
- 当平移结束位置为四个顶点之一时,相当于翻转非空的那个沙漏而另一个平放,可以转化为相同时间的斜着走,然后认为回到起点
每一次走斜线的总体路径是确定的,将它展开放到数轴上,转折点为所有整点和所有 \(\sqrt 2\) 的整数倍点,设排序后为 \(z_{0\sim }\),一条路径包括一次从左往右的主路径和它上面若干次回绕,可以认为是一次行走 \(0\to z_x\to z_y(y\le x)\) 和每个区间 \([z_i,z_{i+1}](i<y)\) 额外走偶数次
所有走斜线的拼起来得到若干次 \(0\to z_x\to z_y\) 和每个区间 \([z_i,z_{i+1}](i<\max y)\) 额外走偶数次,取 \(z_y\) 最大的,剩下的 \(0\to z_x\to z_y\) 要么拆到 \([z_i,z_{i+1}]\) 中,要么拆到 \(a+b\sqrt 2\) 中
一个时间 \(T\) 合法当且仅当
假定 \(x,y\in \{0,1\}\),否则剩余部分可以归入 \(c\) 中
先考虑 \(a<0,b>0\) 的情况,此时在 \(b\) 确定的情况下 \(|a|\) 最大,因此最优情况下选择的 \(z_{i+1}-z_i=-p+\sqrt 2q\) 一定为 \(\le |p|,\le |q|\) 范围内 \(\frac pq\) 最大的,这样尽量少的 \(b\) 可以带来更多的 \(|a|\) 上界的提升
容易用 \(\text{Stern-Brocot}\) 树求出 \(-p+\sqrt 2q>0\iff \frac pq<\sqrt 2\) 且为前缀中最逼近 \(\sqrt 2\) 的 \((p,q)\),显然数量为 \(O(\log V)\) 的
枚举 \(p,q\),然后求出 \(\sum_i(z_{i+1}-z_i)c_i\) 的值,转化为给定一个 \(-s+\sqrt 2t\) 判断能否已知的 \((p,q)\) 组合出,可证只要满足 $\frac st\ge $ 最后一个 \(\frac pq\) 即可
\(a>0,b<0\) 的情况同理
时间复杂度 \(O(T\log V)\)

浙公网安备 33010602011771号