P11347 「KTSC 2023 R2」学生
naoliaok_lovely · · 题解
一道有趣的思维题,不过好像比较板。
先考虑题目的朴素版:已知若干集合(相较于原题目少了区间补集的限制),求最早有一个人发现自己不在某集合内的时间。
设
- 第一轮结束,显然条件为
\exist i,f(\{i\})=\varnothing 。 - 第二轮结束,此时意味着所有的人都至少被一个集合包含。考虑
\exist i,j,f(\{i,j\})=\varnothing ,此时在i 的眼中,如果包含i 的集合是所有集合,就没有集合能够包含j ,那么j 会在第一轮报告。这说明包含i 的集合并不是所有集合,于是i 会在第二轮报告,同理j 也会在第二轮报告。 - 第三轮结束,不难证明充要条件是
\exist i,j,k,f(\{i,j,k\})=\varnothing 。 - ……
于是我们得到结论:第
回到原问题,即求出最少的人数,使得每一个区间的补集都不能完全包含之。这又等价于每一个区间都至少包含一个人。这是一个十分基础的问题,贪心扫一遍即可求出最小人数。还要求所有合法构造的人集合的并,这个就左右分别扫一遍,记录下两次贪心的方案,判断在强制选
时间复杂度