1 条题解
-
0
自动搬运
来自洛谷,原作者为

ix35
垒球搬运于
2025-08-24 22:31:23,当前版本为作者最后更新于2021-07-13 13:36:07,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
两个月前的一道洛谷月赛题。
在打那场比赛时,我最后一小时才开到这题,最后没调出来正解,赛后也就懒得管了。
但是今天模拟赛里又有这题,所以我就翻出了两个月前的代码重新调了一下,发现就是一个加号打成减号了......
顺便看了下题解,发现没有和我完全一样的做法,那就写一下吧......
这属于是一道比较简单的套路型数据结构题,我们抛开部分分不谈,直接分析正解。
这里给出的是一种不需要线段树或其他高级数据结构的在线做法,唯一需要的是 ST 表和二分。
对于每一个 ,考虑蛇 A 如果要进入 的副链并要取得胜利,考虑要满足什么样的条件。
-
蛇 B 向左不断走到达 时,蛇 A 没有完全进入副链。
否则蛇 B 跟着进来,先死的肯定是 A。
-
蛇 B 从 右边某个副链进去,能走的步数一定小于 A 能走的步数。
注意到第二个条件和两蛇长度都无关,首先分析。
假设当前蛇 B 在 处(目前轮到 A 进入副链),如果存在一个 使得 ,那么 A 就会输。
所以 A 要赢就要使得 ,右侧值对于 有单调性,所以我们可以找到最大的 ,使得如果 B 在它右侧,那么 A 都会输。
也就是说,我们可以求出一个 表示,当且仅当 B 头位于 时,A 此时进入 的副链才能使得条件 满足。
这里的求法是先建立 的 ST 表,然后对于每个 二分。
同理我们求出 表示,当且仅当 A 头位于 时,B 此时进入 的副链才能使得对于 B 必胜的条件来说条件 满足。
接下来考虑条件 的限制。
在条件 中我们假设 B 一直往左走,也就是说 秒后 B 的蛇头位置为 ,再考虑 A 完全进入 的副链的时间为第 回合 A 行动之后,所以我们要求 ,也就是 。
也就是说,只要我们钦定 A 能进入副链的 必须落在 的右侧,那么条件 自然满足。
而判定胜负的方法是:谁先进入一个进入则必胜的副链,谁就赢,所以对于 A 我们就要求出编号最小的进入则必胜的副链。
我们依然采用二分,可以进入的副链区间为 ,其中 式子在上面, 是相撞位置。
我们要检验 中是否存在一个进入即必胜的副链,对于其中某个 ,考虑条件 ,当 A 蛇头到达 也就是 回合后,B 蛇头的位置应该是 ,根据之前的检验条件,需要 ,也就是 。
所以我们又可以建立 的 ST 表,然后求最大值来检验。
对于 B 最先见到的必胜副链,类似,只不过建立的是 的最小值 ST 表。
综上,我们只使用 ST 表和二分,就在 的复杂度内在线地完成了本题。
-
- 1
信息
- ID
- 6449
- 时间
- 1000ms
- 内存
- 500MiB
- 难度
- 6
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者