#loj5738. 「OOI 2026 Day2」羊群大游行

「OOI 2026 Day2」羊群大游行

#5738. 「OOI 2026 Day2」羊群大游行

标签: 传统 | 时间限制: 1000 ms | 内存限制: 512 MiB |

题目描述

题目译自 Open Olympiad in Informatics 2026 Day2 T2 「Марш овец」 / 「March of the Sheep

萨沙厌倦了繁重的城市生活,决定搬到乡下。为了给日常生活找点乐子,他决定开始养羊。为此,他在村里买下了一块矩形区域,可以将其看作一个 n×mn \times m 的网格。网格的行从上到下编号为 11nn,列从左到右编号为 11mm

萨沙为这块地买了 nn 只羊,并为每只羊分配了专门的一行。最初,第 ii 只羊被放置在坐标为 (i,ai)(i, a_i) 的格子中(即第 ii 行第 aia_i 列)。萨沙发现,羊只会在水平方向上移动,并遵循以下规则:

  • 若区域内只有一列,则羊不动。
  • 最初,第 ii 只羊位于格子 (i,ai)(i, a_i),且每只羊都有一个初始移动方向——向左或向右。保证不存在位于第一列且向左移动的羊,也不存在位于最后一列且向右移动的羊。
  • 每过一秒,每只羊都会移动一列:若向左移动则移动到左侧一列,若向右移动则移动到右侧一列。
  • 若移动后羊处于第一列且向左移动,或者处于最后一列且向右移动,它就会反转移动方向。这样,羊永远不会离开区域边界。

萨沙不喜欢羊群如此杂乱无章地移动,他希望所有羊的移动步调一致。这意味着所有的羊必须处于同一列,并且具有相同的移动方向。为了实现这一目标,萨沙可以对区域进行若干次(可能为零次)如下的“裁剪”操作:

  • 他选择一个时间点 tt(从羊群开始运动起经过的秒数)以及裁剪后区域保留的列数 xx
  • 在时间点 tt,所有羊必须严格位于大小为 n×xn \times x 的区域内。这意味着对于任意 1in1 \le i \le n,第 ii 只羊在时间 tt 必须位于格子 (i,yi)(i, y_i),其中 1yix1 \le y_i \le x。否则,该裁剪操作是不可行的。
  • 该操作执行后,从时间 tt 开始,区域的列数减少为 xx
  • 操作后,任何位于最后一列(第 xx 列)且向右移动的羊,都会立即反转移动方向。

裁剪过程的详细示例请参见样例说明。

萨沙首先想知道,是否可以通过多次裁剪,使得所有羊的移动步调一致。若可行,他想知道区域最后能保留的最大列数是多少,以及具体该如何操作。请帮萨沙解决这个问题!

输入格式

第一行包含一个整数 TT (1T3)(1 \le T \le 3),该参数表示需要输出哪种详细程度的答案。具体说明见「输出格式」。

第二行包含两个整数 nnmm (2n200000,2m109)(2 \le n \le 200000, 2 \le m \le 10^9),分别表示区域的行数和列数。

第三行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n (1aim)(1 \le a_i \le m),表示每只羊初始所在的列号。

第四行包含一个长度为 nn 的字符串 ss,由字符 LR 组成。若第 ii 个字符为 L,则第 ii 只羊初始向左移动;若为 R,则初始向右移动。保证第一列的羊不会向左移,最后一列的羊不会向右移。

输出格式

第一行输出,若萨沙无法使羊群步调一致,则输出 No;否则输出 Yes

T=2T=2T=3T=3,则在第二行输出萨沙在保证羊群步调一致的前提下,区域能保留的最大列数。若 T=1T=1,则无需输出此行。

T=3T=3,则在第三行输出一个整数 qq (0q106)(0 \le q \le 10^6),表示萨沙需要裁剪区域的次数。接下来的 qq 行输出裁剪操作的描述。

每个操作描述包含两个整数 ttxx (0t1018,1x<m)(0 \le t \le 10^{18}, 1 \le x < m),其中 tt 是萨沙进行裁剪的时间点(从最初运动开始计),xx 是操作后区域保留的列数。

操作必须按 tt 的非递减顺序输出。在连续的裁剪操作中,xx 必须比前一次操作的值更小。

若有多种满足条件的裁剪序列,输出其中任意一种即可。

可以证明,在给定的限制条件下,若存在答案,则一定存在满足上述输出限制的答案。

T=1T=1T=2T=2,则无需输出裁剪操作的具体描述。

样例 1

输入

3
2 3
1 3
RL

输出

Yes
2
1
3 2

样例 2

输入

3
2 3
1 2
RL

输出

No

样例 3

输入

3
3 5
1 3 5
RRL

输出

Yes
3
2
1 4
2 3

00 秒时羊群的状态:

图片下载失败URL:https://img.loj.ac.cn/2026/05/17/adb3e7a6c39e0.svg

sheep-move-border.1.svg

11 秒时羊群的状态:

图片下载失败URL:https://img.loj.ac.cn/2026/05/17/83a86f594d24c.svg

sheep-move-border.2.svg

此时将区域裁剪至 44 列:

图片下载失败URL:https://img.loj.ac.cn/2026/05/17/e90c1fd7e9651.svg

sheep-move-border.3.svg

22 秒时羊群的状态:

此时所有羊位置如下:

图片下载失败URL:https://img.loj.ac.cn/2026/05/17/7795eb19a4b71.svg

sheep-move-border.4.svg

再次将区域裁剪至 33 列:

此时所有羊都在第 33 列且由于都在边界并试图(或已经)向右,最终方向都会统一。

最终状态:

图片下载失败URL:https://img.loj.ac.cn/2026/05/17/7f38096a623f9.svg

sheep-move-border.5.svg

所有羊步调一致。

样例 4

输入

2
3 5
1 3 5
RRL

输出

Yes
3

样例 5

输入

1
3 5
1 3 5
RRL

输出

Yes

样例 6

输入

3
3 7
3 3 5
RRL

输出

Yes
4
3
0 6
0 5
1 4

数据范围与提示

详细子任务附加限制及分值如下表所示。其中子任务 00 是样例。

子任务 分值 TT 限制 nn 限制 mm 限制 附加限制 子任务依赖
11 88 T1T \le 1 - - -
22 1111 T2T \le 2 n3n \le 3 m4m \le 4 -
33 99 - n=2n = 2 - a1=1,a2=ma_1 = 1, a_2 = m
44 1212 m200000m \le 200000 -
55 88 - - 3,43, 4
66 1414 T2T \le 2 n1000n \le 1000 m1000m \le 1000 - 22
77 1010 - - 1,2,61, 2, 6
88 99 - 字符串 ss 仅含 R -
99 1212 n1000n \le 1000 m1000m \le 1000 - 0,2,60, 2, 6
1010 77 - - 090 - 9