SS25winter
Day 0 - 数学
A - 洛谷 P2522
简单莫比乌斯反演。
B - QOJ9866
不难发现,由于我们只有
首先,我们有一个暴力的做法:直接枚举所有可能的询问,然后判断能否通过这个询问表示
接下来考虑用贪心优化。每次我们找到一组距离为
根据我们的常识可知,一个点对导出的异或方程有用,当且仅当这个方程不能由前面的方程推出来。用严谨的语言来说,就是这个异或方程和前面的方程线性无关。
因此,我们考虑维护前面所有方程的线性基。最后用高斯消元即可。
C - GYM105423D
直接莫比乌斯反演即可,公式很好推。
附公式:
这个公式的计算是
D - CF2039C2
首先考虑计算
一个比较常见的 trick 是,
接下来计算
乍一看貌似不可做,因为二进制中的整除难以刻画。因此,我们重新观察题目,发现
因此考虑分析满足上面的方程的
也就是说,我们只需要枚举
E - QOJ9868
突破口是
接下来你就会发现你被骗了,因为即使是样例,输出也很小。
考虑证明这个东西。最不利的情况时,
同样的,最不利时
这样,我们总共不会操作超过
F - CF2006C
首先,为了判断一个区间能否被表示,我们分析一下题目中的操作。
首先举一个例子。比如说
接下来考虑什么情况会让公差为
代码实现可以考虑对于上面的两种情况分类,都用 st 表 + 二分解决。
H - QOJ1168
线性基性质题。
前置知识:
线性变换。
用不严谨的语言来说,对于在域
上的线性空间 来说,线性变换 (定义域为 ,值域为 )需要满足以下限制:
,有 。
记所有环的异或和的集合为
性质 1:
。
证明比较显然,略过。
性质 2:
。
证明可以考虑如何求出左式和右式。
我们需要求出
则
性质 3:变换
是线性变换。
套用定义。这个东西等价于证明
证明类似上面。
最后的最后,开始推式子。
K - QOJ9623
考虑一个
分情况讨论。
:由题意,此时肯定只有一个点,可以对答案产生贡献。 :这个点只能成为合并时 中的 或 ,也就是说,这种情况中的 次大值可以对答案贡献。 :这个点可以成灰合并时 中的 ,即 可以对答案产生贡献。
上面我们得到了答案的理论上限,接下来考虑取到这个上限。令最后产生贡献的时
L - QOJ9622
考虑
令
接下来,由于前面的定义,
接下来,我们唯一不确定的变量就是
Day 1 - 记数
B - 洛谷 P11363
容斥做法没咋懂,用了另一种做法。
对于
对于
为了绕过容斥,我们考虑怎样的一棵遍历树可以被表示。
对于一棵遍历树,我们发现它的起始边只能是一条叶子到叶子的链。证明考虑一个点周围的边如何满足条件。
最后 DP 即可。
E - QOJ9778
首先,当
接下来考虑
- 这个条件告诉我们,失败的概率很小。
- 再加上
较大,也就是说我们几乎不可能用完所有道具。 - 题目罕见地让我们输出了小数,说明我们并不需要精确的期望。
也就是说,我们在这种情况中,通关的期望次数是
F - QOJ7662
简单容斥。
H - 洛古 P3757
首先不难往树形 DP 去想。
令
转移不难。
J - GYM105459E
由于总共只有
对于每种时间,每个弹珠都有一定的概率大于它。我们需要找到有恰好
这个东西可以用 DP 做到
但是,我们发现相邻两个时间中的概率差异不大,且这个差异是
Day 2 - DP
A - GYM105336I
转化:
运用上面转化的原因是
那么我们枚举
将
接下来就很好 DP 了。令
F - CF2048F
首先考虑最优决策。
对于
接下来,由于我们是除法操作,所以次数是
接下来不难想到 DP:令
直接 DP 可以做到
G - CF2002F1
Write anything and pray that it will pass because of number theory magic.
乱搞万岁!!!
首先发现,我们可以走到
性质一:
乱搞:令
J - CF2020E
令
所以
而
Day 3 - 数据结构
B - QOJ9774
考虑如何判断一个区间
首先,我们需要排序
- trick:利用生成函数处理排序。
记
则询问为 yes
的充要条件为
F - 洛谷 P11527
令
接下来直接分块即可。
Q:如何确定
A:对于每个质数
G - QOJ9409
将红色记为
例如,10001001010001
-> 10001000010001
。
不难发现,影响答案的
建立平面直角坐标系,发现这就是一个矩形。接下来有两种做法:
- std:线段树合并,维护连续的蓝色段。
- 我的做法:树套树,不过为了减少常数,内层是前缀和。
I - QOJ9738
“存在”这个条件不好刻画,所以我们需要尽量对于每个区间都找到一个固定的
显然,我们需要让最小值成为题目中的
接下来可以考虑类似分治的结构。如果
这个结构其实就是笛卡尔树。继续手玩可以发现,我们让树上的每条边都满足
接下来,可以推出
J - QOJ9727
首先拆位。
接下来有比较显然的
发现我们的瓶颈在于存储一个长度为
具体来说,对于每一位,我们都维护两个 bool
变量,分别表示这个区间是否全为一以及这个区间是否只有一个零。
然后不难想到把这些信息压成一个数,然后就做完了。
注意 pushdown
的特殊情况。
Day 4 - 图论&构造
A - GYM102896A
不难想到利用贪心递归填数。
无解的情况是递归到某棵子树时
B - GYM102896C
这种题一般分为两部分:理论上界+可以取得到上界。
首先,理论上界是好求的。令
上界也是可以取到的。考虑递归。每次将
C - CF2025F
不难想到建图:
最优的策略肯定是选择若干组匹配的边,使得
发现图不好做,所以考虑树的情况。
对于一个树,手玩之后可以发现:
如果边数为偶数,则可以完全匹配;否则无法匹配。
可以利用上界确定+构造(归纳)来证明。
考虑拓展到图。对于图生成树的一条返祖边,我们同样放到深度较浅的节点进行匹配即可。
E - CF1030D
由三角形面积的计算公式,设底为
接下来,可以证明,如果
由此,我们仅需要求出
接下来,由于题目条件,我们必须保证
于是,我们只需要枚举
F - GYM105257B
首先,由于
但是这样子跑不动
- 对于在边界的点,它一定等于
1
。 - 两个符号不能相邻。
- 用上面的性质跑几个比较大的样例,可以发现,对于
,若 都是 的倍数且 不在边界,则 这个位置填*
。
最后直接 DFS 即可。
G - GYM105486K
首先考虑建图。
我们就相当于是有
因为每个点到达最后的点的数如果固定,那么答案也固定,所以考虑简化这个图:
H - 洛谷 P11531
首先考虑特殊性质。当
接下来,分析我们的限制:
-
断开
的价值为 1。 -
每条边
都要连向 。
接下来不难给出构造:
,表示第一条限制。 ,表示第二条限制。
不难得出这个构造是正确的。
K - QOJ9374
首先, 不难得到一个点能否走的充要条件:
如果
显然,由于怪物可以原地折返,所以如果我们能在
接下来我们就需要求出所有怪物到每个点的奇数最短路和偶数最短路。最后跑 BFS 即可。
Day 5 - 数据结构
A,B - qwq
简单题,略过。
D - QOJ9104
。证明略。
接下来,发现修改的次数不会很多,直接暴力即可。
F - QOJ7513
首先,考虑这么一个过程:链 -> 树。
在链的情况下,我们有一个很显然的 DP,按照每个相同颜色的距离递增来转移。
这个 DP 是
接下来,把链的做法放到树上。
同样的,用 DP + 树套树即可。
G - QOJ7523
首先分析性质。显然,答案是单增的。
其次,暴力也是简单的。对于一个询问的
“答案单增”+暴力做法可以考虑决策单调。
证明也比较简单:发现
最后分治即可。
H - GYM105336J
首先,将交换后的
接下来不难想到线性基。由于我们还不知道
这个东西相当于是钦定有一位必须异或 / 必须不异或的取
Day 6 - 树
trick:弱化问题的限制,同时保证新问题的答案不会优于原问题。
A - QOJ9110
手玩可以发现我们必须得让最大值、最小值都在端点。
接下来运用 trick DP 即可。
B - QOJ8239
看次数猜做法。这里默认我们在判定是否是菊花。
- 对于
次操作:
我们可以询问
- 对于剩下
次操作:
我们知道,如果一个树是菊花的话,肯定所有点都会向菊花中心连边;而我们既然找到一条边,我们就可以用
D - QOJ7883
性质:最小瓶颈树=最小生成树。
不难想到枚举最大值,用最小瓶颈树找出次大值。
但是我们需要保证次大值小于最大值,一种方法是暴力用数据结构维护。
但是,由于最小瓶颈树的性质,我们只需要保证一个节点可以通过小于最大值的边到达根节点即可。
H - QOJ7009
点减边容斥:满足条件的路径数量=总的点数量-总的边数量。
而对于这两个东西都是好求的,可以考虑每个点 / 边的贡献。
I - QOJ7755
对于森林中的每个树都求出对应的 SG 值。
而这个 SG 值可以通过手玩得出。
最后通过换根 DP 求出删除点 / 边之后的 SG 值变化即可。
M - QOJ9530
暴力的想法:考虑枚举共同经过的两个端点,然后对于两个端点分别 DP 即可。
接下来,对于
接下来拆开算,可以用若干个 DP 解决。
Day 7 - 字符串
A - GYM105336E
第一问随便做,比较坑的一点是它要取模。
第二问有两种方法,这里讲老师提供的方法。
总期望=每个节点被选的期望之和。
显然,由于我们是均匀随机,每层的节点被选的概率是相同的,而对于第
然后就做完了。
D - 洛谷 P1117
这是一道 trick 题。
首先有 AABB=AA+BB,于是我们需要求出:以一个点开头 / 结尾的 AA 串的个数。
这时候就要用到我们的魔法了。
trick:
对于这种 AA 串的记数,我们可以这么做:
- 枚举 AA 串中 A 的长度
。 - 每隔
个位置就撒一个点。 - 显然,我们的 AA 串会跨过两个相邻的点,令跨过的点为
。 - 在跨过的点固定的时候,我们的每个 “A” 串都可以分为一个前缀和一个后缀。
- 前缀的长度和后缀的长度都是有上限的,所以满足条件的 AA 串的左端点和右端点都是一段区间。
- 上面这个东西可以用差分加上 SA 或 二分+哈希解决。
然后就做完了。
G - QOJ7512
DP。
令
则
对于一个区间,当左端点固定时,右端点肯定也是一个区间。这个区间可以用二分+哈希求出来。
最后你会发现我们需要区间加上一个数,单点求和,可以用树状数组。
I - QOJ5311
首先,如果一个字符串是另一个字符串的前缀,那么这两个字符串的大小关系是确定的。
否则,这两个字符串肯定存在一个位置的值不同。设第一个字符串的这个位置是
如果在询问的大小关系中
上述的事情都可以用字典树实现。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】