day0
简单数学基础
前言
数学是算法的核心
知识清单
-
莫比乌斯反演
-
高斯消元
-
拓展欧几里得
-
矩阵乘法
-
逻辑、命题与证明
A - 简单莫反(I)
首先进行一个转化,记
那么对于询问
这么做是为了将询问从四个自由元变成两个自由元
如何求出
实际上我们知道形如
设
那么有
应用莫比乌斯反演有
应用整除分块即可
B - 简单高斯消元
可以把所有的可行的询问处理出来(先别问交互器,先在本地处理一下),当作一个线性方程组
然后就是看这
但是直接高斯消元的话时间复杂度是
C - 简单莫反(II)
先考虑去掉绝对值,那就是把
对于
(md,latex太难敲了,现场给你们讲吧)
就是仿照 A 题的处理思路来处理
所以时间复杂度就是
D - 神奇不等式
首先注意到不等式:
然后分类讨论:
对于
暴力枚举检验
对于
所以有所有的
然后对于边界处的
E - 不等式证明时间复杂度
首先不难注意到答案不超过
那么时间复杂度为
F
这需要注意到一个性质:
性质1:
一个集合能合并的充要条件是差分数组的
不含有 以外的因数
证:
考虑无法操作的时候,所有元素的差分数组是奇数且相等
因为如果存在偶数,那么可以把偶数拆分;
如果存在不同的奇数可以在不同的奇数间操作
然后不难发现一个性质是无论怎么操作差分数组的
必要性:假如
充分性:假如
然后通过欧几里得算法可知,改变集合内元素的顺序不影响
实现方法有很多种,包括线段树和st表,这里提供 cdq分治 的做法
G - 狗屎的构造题
考虑把所有数分成四类:
然后题面就转换为了求出
(a)如果去掉的是
(b)如果去掉的是
(c)如果去掉的是
(d)如果去掉的是
(e)如果去掉的是
(f)如果去掉的是
(g)如果去掉的是
(h)如果去掉的是
然后相当于使用了
假如出现了 (b) ,直接结束
其余的情况考虑分类模拟即可
H - 线性基入门题
不难发现所有的环都是可以选择走或者不走的,这就启发我们使用线性基来计算
先把图的
然后看看怎么处理答案:
把建完线性基的图再跑一遍
对于一个
这个时候我们不能直观地看出
I
建议先把 J 做出来再做这个题
不难发现结构:
POP 1 GOTO 2;PUSH 1 GOTO 1 POP 2 GOTO 3;PUSH 2 GOTO 1 POP 3 GOTO 4;PUSH 3 GOTO 1 ... POP [i] GOTO [i+1];PUSH [i] GOTO 1 ... POP [K] GOTO [K+1];PUSH [K] GOTO 1 HALT;PUSH 114514 GOTO 1919810
会被运行恰好
然后不难发现将第 GOTO 1
改为 GOTO 2
那么将使答案减少
所以需要求出最大的
事实上,这个构造是该题目的最优解,赛时通过此题允许两倍的构造空间
J - 递归分析
事实上想整出死循环还是很简单的
由于每次是在栈顶添加和访问元素,所以可以考虑对于每一个指令分别求出其存活周期(因为它会把以前的元素覆盖掉)
(1)事实上如果一个指令会去到死循环的指令,那么这个指令是死循环的
(2)一个指令的生命周期内不能再次出现自己
对于每个指令维护:
生命周期、生命周期结束后去到那个位置(或者程序终止)
由于确保了 (2) 性质,每一个指令遍历的元素不会超过
K - 简单证明题
先二分答案,把所有的点都变成黑白点
然后注意到一个性质:
性质1
最后的答案能成为黑点的充要条件是:
(1)存在一个黑点的度数大于2
或者
(2)存在至少两个黑点
可以使用归纳法证明
L
转化一下题意: 就是要求
考虑进行一些变换:设
则
可以分析:
然后我们对
所以
则有
然后这个时候分子必须把分母里的
M
事实上,与其关心两者的比例不如关心其中一者的占比
然后这个题目就转换为:
递归判断即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效