模拟赛

\(呐呐呐Broken\ Eclipse你签到题做不出来你就是屑了啦!\)

\(隔离\)

题意:

给定 \(n\) 个点,只能分散地放在 \(m\) 个不重合的区间,计算使 \(n\) 个点之间的最小距离最大的结果。

解题思路:

义眼顶针,鉴定为:二分。

离谱的是,我二分由于一个比较容易忽略的细节挂掉了。

更离谱的是,我大样例挂掉之后我直接把把它跳过去做 \(T3\) 了。

更更离谱的是, \(T3\) 榨干了我所剩不多的两个小时的时间,还没做出来。

于是乎这个题就出现在这里力。

使最小距离最大,我们考虑对距离进行二分答案,如果 \(mid\) 符合了题目要求(即每个人以 \(mid\) 为相隔最小距离全部位于合法区间以内 ),则向外进行拓展,否则就往里缩,直至找到符合题目要求的,容易发现距离越小越可能符合结果。

一个代码实现细节:显然我们要满足每个人都在合法区间内并且以 \(mid\) 为距离最小值。贪心地想,假如说我们这个区间的始端与上一个区间最后一个人的位置 \(pos\) 相差距离小于等于 \(mid\) ,我们必须在这个区间里找一个满足最小距离为 \(mid\) 的位置,即 \(pos+mid\) ,如果不存在,那么我们应该在下一个区间继续找,需要注意的是此时这个 \(mid\) ,是不可以加到 \(pos\) 上的(因为这里根本就不能放嘛怎么可能加上来),等到下一个区间再去进行判断就可以了。

$如果无解,输出 Poor\ Broken\ Eclipse $

\(真相\)

题意:

\(n\)个人构成一个环,每一个人都会说一些很惊世骇俗的话,例如:

  • 下一个人说的话是真的!

  • 下一个人说的话是假的!

  • 一共有 \(k\) 个人说的话是真的!

根据这些人的话判断其是否无论如何都会自相矛盾。

解题思路

考前:什么玩意。

考后:我是几把。

如果这些人没有一个说上述的第三句话(我以下简称美刀,不解释为什么),那么我们可以假设第一个人说的是真的往后推,判断最后一个人说的话是否与目前情况自相矛盾即可。

如果偏偏有呢?

容易看出来的是,说过美刀的人的下一个位置的人,他说的话的真实性是无法判断的——

\(Kaguya\) 说,要有链,于是环就变成了链。

我们以无法判断真假的那个人为起点,以他以后说美刀的第一个人为终点,把环断为链,用一个结构体保存一下假使美刀成立此时链中说真话的人数,说假话的人数,以及美刀。发现不同的美刀中只有一个人说的话是真的,那么我们就对美刀排序并去重(真话人数和假话人数分别累加)。

接下来只可能有两种情况:

  1. 这几个货里说的美刀全是假的,那我们把所有说假话的人数加起来,判断其是否与其相等即可,如果不相等就说明有解,否则继续找。

  2. 记录所有说假话人数的总和。遍历这些环,由于只有一个美刀说的是对的,那么总和减去这个链说假话的人数再加上说真话的人数就是此时说真话的人数,直接比较即可,如果相等说明有解,否则继续找。

  3. 好吧,以上情况判断完了可真就自相矛盾力。

有一说一,断环成链的那一段真恶心

\(我说的这句话是假的。\)

posted @ 2022-08-22 22:16  Broken_Eclipse  阅读(56)  评论(0)    收藏  举报

Loading