CTS2019 部分题解
CTS2019 部分题解
Counting, Totaling, Summing。我们数数,我们统计,我们求和。
随机立方体
概率可以变成方案数/总方案数。
题面的 太丑,换成 ,为长方体的长宽高。
设
首先观察到选 个极大的点,要保证剩下的恰好都不是极大点,非常困难。于是考虑容斥,或者叫二项式反演。
设 表示至少有 个极大点方案数, 表示恰好 个极大点方案数。那么:
那接下来如果能求出线性求出所有 ,就可以线性求出 。
对于方案数,我们分几步走:
- 选出来这 个点
- 填数
对于数数/概率题,把方案分步做,再用乘法原理合并,是一种常见的考虑方法。
首先一个极大点在三个面里都是最大值,并且 个值是两两不等的,那肯定不能有极大点的 坐标相同。所以选位置的方案就是 。注意到同一种方案包含的 个位置是 无序 的,所以除一个 。
接下来是填数字的方案。我们设 表示第 个极大点, 表示 能够“管辖”的点集,也就是跟它 坐标或 坐标或 坐标相同的点的集合。设 。
注意到 集合中的点是受限制的,要比控制它们的那些极大点小。而 集合外面可以瞎几把填。
考虑 的大小。似乎不太好考虑,考虑 的大小。 相当于所有极大点都管不着的点集。那对于每一维,都不能与 个点的任意一个相同,而极大点的三维坐标都是两两不等的,所以直接 就行。那就是
那我们再减回来就行,
那现在来考虑“填数”这一步。
除了 外的 个数瞎几把选,方案数是 。
对于这 个数,我们可以先选 个数,再看考虑如何排列。选的方案数是 。
对于填的方案,我们手玩一下发现,一个位置可能要满足好几个限制,这是坠难受的。但是我们又仔细一想,它要满足的这些限制之间,还有一层套一层的关系。
如下图。由于三维不好画,画成二维,清楚一些。
如图,如果红色比蓝色小,紫色同时受两者管辖,那么可以认为它是先比红色小,然后红色比蓝色小。根据不等式的传递性,这样转换一波很显然是等价的。
但是这样就很有意思了,我们把图画出来,发现它好像可以搞成一颗树。感性的想象一下,就是每个点找一个最近的比它大的连过去一条边,最大的不连边,肯定会连出来一棵树。翻译成理性一点的话说,
- 对于一个极大点:连到比它大的最小的那个极大点(后继),最大那个除外
- 对于一个非极大点,但在 集合中的点:连向管它的最小的那个极大点
这样一共有 条边,每走一条fa边,值一定变大,并且会停在最大的那个极大点上。于是这个图一定是颗树。
然后问题变成树的拓扑序问题,就是点数阶乘除以每个点size的积。那我们知道size就行了。
对于一个在 中不是极大点的点,那它的size肯定是 ,直接不管;否则当前点是极大点,那它的子树就是比它小的极大点的 集合的并。
注意到, 个 集合的并大小肯定是 ,无论这 个点在哪。
于是这颗树的拓扑序数为:
这就是填数字进来的方案数
我们总结一下式子,
注意到 ,与 恰好抵消。此时剩下:
这个东西就是 了,显然可以预处理做到全线性算。
氪金手游
这题是一个随机套随机的模型,先随机一个 ,然后随机选点。
我们可以运用 这个结论,发现我们相当于要求概率的期望值。
先考虑对于确定的 ,满足条件的概率咋算。
注意到如果我们把有向边变成无向边,那这个图就是一棵树
如果有向边全是内向/外向,那倒是可以拓扑序做。很遗憾,不能,两种边是很可能同时存在的。
我们可以钦点,把所有边都想办法变成外向的。但有些边就是内向,那咋办呢?
做心理辅导 容斥。对于一条内向的边,把方案数看成是:(没有限制的方案数)-(外向的方案数)
暴力的容斥是 的,就是把这一堆乘起来的括号拆开。快,实在是快。
观察拆开的项,如果有奇数个外向,那系数是 ,否则系数是 。所以我们直接把容斥系数放进dp里,dp一遍即可。
接下来我们考虑带上期望一起算。对于当前的 ,它的子树里会有一些边是没有限制的。对于没有限制的边,我们把边切掉就行了。然后会裂开变成若干连通块,设 所在那个块里面的点 的和为 。那我们这样随机抽一波,上来就抽到 的概率是 。
考虑记 表示 子树里切掉无限制边后, 所在连通块的点 的和为 ,对答案的贡献(带容斥系数)和。
对于 的儿子 ,如果是一条外向边,非常的simple,直接把它俩卷积起来就行。
如果是一条内向的边,分成两个项,没限制-外向。
“没限制”这个项,就是 即可。 可以任意取,因为这条边断了,对 的连通块和没有影响。
“-外向”这个项,要取个负,上面的+=
改成-=
,就行了。其实就是所有的容斥系数都变化了 倍。
像这样dp一遍, 就是答案了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】