#CF1987G2. Spinning Round (Hard Version)
Spinning Round (Hard Version)
CF1987G2 Spinning Round (Hard Version)
题目描述
这是该问题的困难版本。两种版本的区别仅在于 中允许的字符。只有当你同时解决了两个版本的问题时,才能进行 Hack。
给定一个长度为 的排列 ,以及一个长度为 的字符串 ,其中每个字符都是 L、R 或 ?。
对于每个 ,:
- 定义 为最大的 ,使得 。如果不存在这样的 ,则 。
- 定义 为最小的 ,使得 。如果不存在这样的 ,则 。
初始时,你有一个 个点(编号为 到 )且没有边的无向图。然后,对于每个 ,,向图中添加一条边:
- 如果 ,则添加边 。
- 如果 ,则添加边 。
- 如果 ,你可以选择添加边 或 。
请你求出所有可能构造出的连通图中,直径的最大值。如果无法构造出任何连通图,输出 。
设 表示从 到 的任意路径上最少的边数。
图的直径定义为所有点对 中 的最大值。
输入格式
每组测试数据包含多组测试用例。输入的第一行包含一个整数 (),表示测试用例的数量。每组测试用例的描述如下。
每组测试用例的第一行包含一个整数 (),表示排列 的长度。
第二行包含 个整数 (),表示排列 的元素,保证 是一个排列。
第三行包含一个长度为 的字符串 ,只包含字符 L、R 和 ?。
保证所有测试用例中 的总和不超过 。
输出格式
对于每组测试用例,输出一个整数,表示所有可能构造出的连通图中直径的最大值。如果无法构造出任何连通图,输出 。
输入输出样例 #1
输入 #1
8
5
2 1 4 3 5
R?RL?
2
1 2
LR
3
3 1 2
L?R
7
5 3 1 6 4 2 7
?R?R?R?
5
5 2 1 3 4
?????
6
6 2 3 4 5 1
?LLRLL
8
1 7 5 6 2 8 4 3
?R??????
12
6 10 7 1 8 5 12 2 11 3 4 9
????????????
输出 #1
3
-1
-1
4
4
3
5
8
说明/提示
在第一个测试用例中,有两个连通图(节点编号为索引):


左边的图的直径为 ,右边的图的直径为 ,所以答案为 。
在第二个测试用例中,无法构造出任何连通图,所以答案为 。
由 ChatGPT 4.1 翻译