D 题题解的对期望的容斥我没太看懂,看样子复杂度应该是
看了一眼所有通过记录,就我是这样写的,而且时间也很悬,像是放了一个假做法通过。。
Once edited 4 年,6 月前
# | Tag | Idea | Developer | Tester |
---|---|---|---|---|
A | 数论 | Xiejiadong | Once | Weaver_zhu |
B | 贪心 | Xiejiadong | bingoier Once | Xiejiadong |
C | 贪心 构造 动态规划 | cs2017 Xiejiadong | Once bingoier | 10185101232 |
D | 计数 容斥原理 | changtiaoraplanqiu | changtiaoraplanqiu Once | 10185101232 |
E | 数论 构造 | Xiejiadong | bingoier | 10185101232 |
F | Trie 树套树 | Xiejiadong | Once bingoier | NULL |
首先肯定需要转换一下,把起点变为
首先判断无解的情况:
假设
分情况讨论一下:
所以
Xiejiadong :事实上,验题人在前一天验题的时候提出了这个题是个原题,但由于短时间内没有题目可以替代,考虑到 EOJ 月赛不涉及到任何利益仅用作大家交流和学习的平台,所以就只能硬上。
考虑
大概可以证明一下,显然前一批次取的叶子结点一定要比后一批次的叶子结点更多,调整法可知一定是最后几层叶子,又因为一条简单路径最多经过两个同批次取的叶子结点,所以显然是可行的。
我们不妨从简单的情况开始考虑。当
首先二分答案,考虑如何判断一个答案是否合法。
我们可以用类似于拓扑排序的方式。首先将所有叶子节点加入队列,接着每次选取队头的节点为监测站,并将其删去,如果产生了新的叶子节点,则加入队尾。进行操作直到选完二分预期数量的监测站。
接着我们就可以利用树上动态规划,检查简单路径上监测站的最大值,不再赘述。
总时间复杂度
不难发现,一段连续的
粗暴做法的答案为 1 0 0 -1 1 0 0 -1,而一种正确答案为 1 0 0 0 -1 0 0 -1,对比一下,其实就是把相邻的
设
时间复杂度
设共有
解:
min-max 容斥.
令
那么所求即为
注意到这里
使用min-max容斥公式
根据期望的线性性,只要求
先考虑最简单的
问题:
有
尝试化简一下发现不会做了,考虑用递推来做。
计算
那么计算时,只要把
最后答案就是把 min-max 公式套进来就行了。
设
所以,整个自然数数列的密文就是 0 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 …
Once :为了增加签到难度,bingoier 在输入范围中加入了
Once :这六道题题面是我写的,大家有喜欢的不喜欢的欢迎吐槽。
先说一个简单又有点套路的结论。节点
这个问题是经典的字典树运用。我们把
然而“把
总时间复杂度
考虑如果是固定起点,在树上找任意点作为终点的时候问题如何解决。
此时,我们如果要求任意两个点
而从这个问题拓展到规定子树的查询问题,其实也是一个比较套路的事情。如果按照 dfs 顺序编号的话,子树对应的编号一定是一个连续的区间,所以对于一个子树,我们只需要知道编号的开始和结束位置,也就是说,我们在 Trie 上找对应结点的时候,我们需要保证走到的 Trie 结点的子树中包含至少一个在
这题数据稍微粗糙了点,造的时候也没有刻意去卡。不过这题可以说是 min-max 容斥的板子题了。