day1
网页:https://vjudge.net/contest/684804#overview
简单计数基础
A
注意到一个东西,从一个数
因此先考察一个简单的问题:一个数 能不能变成 ?
性质1:
如果第某一位使用了一次四舍五入后,它以后都不会有机会往后进位了
换一种说法是,前面的数至多能对后面的数产生的贡献,证明可以使用数学归纳法来完成
因此可以认为从小位往大位来 dp 是合理的
因此考虑状态
回归到原问题上
事实上刚刚的问题帮助你获得了一个检验数
B - 这是 NOIP2024T3
一看这个题会发现一个问题:以不同的边作为起点所形成的树是有可能重叠的,不能简单的做加法
不妨先思考一下简单的情况:如果如果只有一个边作为起点,那么是怎么样的?
事实上手玩一下就能发现如果钦定了起始边,然后像一棵树一样把所有边展开,那么实际上方案数就是每个节点的儿子数的阶乘的乘积,这是因为:一坨共用同一个点的边在遍历顺序中就是一条链
性质1:
固定了一个起始边,那么由这个边能生成的树的个数是
然后考虑第另一个特殊的情况:什么样的遍历顺序可能会同时被两条起始边同时计算到?
实际上就是上文所说的那个遍历顺序中一条链的开头和结尾被固定的情形
那么多个起始边呢?
性质2:
这些边要构成一条链,而不能出现分叉的情形,不然就不可能同时由这些起始边弄出一个共有的遍历顺序
性质3:
在这条特殊的链上的每个点上,开头和结尾是固定的,但是其他位置就不固定了,因此,这个点的贡献由
变成 ,因此需要给这个链上的每个点 乘以
容斥
令
过程中不难发现我们不关心哪些边被计数到了,我们只关心计数到了多少边,因此可以考虑在往集合里加边的时候同时乘以
首先为保证补充不漏,我们钦定每一条链的贡献在其 lca 处被计算,因为
令
否则就是维护子树和即可:
C
大体思路
注意到题目要求的是可重集对数,因此我需要知道左右两边的可重集合里有多少种元素后还需要用一个组合数来求解
最朴素的暴力,枚举左边的集合出现了哪些数字
-
(a)
右边集合的某些数字必选,记这些数字的集合为 -
(b)
有若干个形如 " 中至少选一个的" 的限制
我们将题目中的
如果在原来的图中某条边连接的两个点其中一个出现在左边的集合中,而另外一个没有出现,那么另外一个就必须出现在右边的集合中,这是 (a)限制
如果在原来的图中某条边连接的两个点都出现在了左边的集合里,那么这条边就转化成了 (b)限制
,如果在原来的图中某条边连接的两个点都没有出现在左边的集合里,那么这样的左边的集合是不合法的
然后可以注意到,其实 (b)限制
拍在图上是 原图对于点集
因此可以把右边点集 (b)限制
的染了色的点集
不过在此之前还需要把原图里没有任何边的点提前抽出来,扔到集合
然后考虑怎么计算这个过程:
我们记
首先枚举
然后检查 (b)限制
,如果均能通过上述检验,那么
优化
-
具体的,你关注到其实想要计算
你不需要 而是需要 -
另外一点,就是
符合(b)限制
的一个等价命题是: 点集 的导出子图是一个独立集
然后实际上有
因此就有
-
是独立集(这只与 有关,与 无关,我们成功分离了(b)限制
里的捆绑的关系) -
所以可以先把所有独立集
D
设
考虑进行阿贝尔变换,得到:
然后考虑
先把序列里头所有小于
统计有多少种填法,记为
于是这就须要求
那么就是有
(a)
表示第 行存在至少一个白色,其中(b)
表示第 列存在至少一个白色,其中
那么有
这种限制很不好弄,但是每个限制的补集却十分的简洁:某一行或某一列全为黑色
那么考虑容斥,就是枚举强制违反那些限制,忽略其他限制,而不难发现这个东西可以使用一个组合数来计算,并且你只关心违反了几个行限制,几个列限制,具体是谁并不关心,因此这是一个二项式反演,然后推式子
显然后面那一坨仅与
则
显然这是一个卷积的形式,因此使用多项式乘法即可
把
E
好玩题,事实上,你们应当反应过来:求期望为什么不取模
事实上
首先考虑 充分大的情况
那么实际上就是我每次失败都会使用道具,所以每次期望进到下一层的期望步数是
事实上,经检验,当
然后考虑当 不是很大的时候
你需要注意到一个性质
性质1:
你的道具更愿意留在后面使用:也就是说,如果在第
层失败了,如果不使用道具,那么在第 层失败了之后都不会使用道具
可以推导出,从第
因此令
F
容斥入门题
令
而最后
G
需要注意到一个性质:
性质1:
删除的数一定是最小的若干个数
因此考虑这么一个过程:
每次从集合中移除最小的那个数,直到最大公因数和最小值不相等的时候
由此产生了性质2:
不会删除超过
个数
因此这个题目被拆分成了两个过程:
(1)删除 (2)终止状态
求出
显然有
之后令
最后答案为:
H
令
转移:
考虑将
I
首先考虑朴素的解法:
对于任何一幅图片,我只关心它被访问过多少次,以及当前的总和是多少,因此:
令
然后可以借助
不难发现这个做法中的很大一部分时间复杂度都是由于符号引起的,如果能把符号去掉就好了
然后不妨思考一个东西:
要是所有照片都是
如果所要照片都是
因此记
然后考虑一下进行第
这就很有意思了,你发现某一次访问某个照片的概率与具体访问过它几次无关,而与它当前的期望有关
而由于期望是线性的,某个照片当前的期望就是每一步访问它次数的期望之和,这个玩意儿可以写成一个递推式:
怎么创造所有照片的符号都相同这一个条件呢
那就是计算出来,在
这个可以用一个
就是
J
转化一下题意:
每个球有一个到达零点的时间
枚举时间
然后就是对这
考虑优化,因为现在的时间复杂度是
考虑时间的瓶颈:重构背包花费了大量的时间
我们将时间排序,那么实际上每个球的修改量的总和是
因此时间复杂度是
K
实际上是对于每个询问要求选出一个子树使得该子树与给定的路径有交
为了保证不重不漏,我们钦定一个子树在它与这条链的交的深度最小的节点处被统计
换根dp 即可
令
令
转移:
然后倍增维护一下路径上的节点的和即可
L
虚树+dp
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!