#P12727. [KOI 2021 Round 2] 公共括号子串字典序
[KOI 2021 Round 2] 公共括号子串字典序
题目背景
试题来源:https://koi.or.kr/archives/。中文翻译做了少量本土化修改。
按照署名—非商业性使用—相同方式共享 4.0 协议国际版进行授权。
题目描述
给定两个只由左括号 (
与右括号 )
构成的字符串 和 ,以及一个自然数 。
我们定义集合 表示:所有既是字符串 的子串、又是字符串 的子串,并且是一个合法括号序列的不同字符串所组成的集合。
你的任务是判断 的大小是否不少于 。如果不小于,则输出 中按字典序排列后的第 个字符串;否则,输出 。
你需要在一个输入数据中处理 个测试用例。
合法括号序列的定义
一个合法括号序列定义如下:
- 单个括号对构成的字符串
()
是合法括号序列。 - 若 是合法括号序列,则 也是合法括号序列。
- 若 和 都是合法括号序列,则将它们连接而成的 也是合法括号序列。
- 所有合法括号序列都只能通过上述三条规则构造。
例如:((()(())))
和 (())()()
是合法括号序列,而 (()
和 )((()()
都不是。
子串的定义
给定长度为 的字符串 和两个整数 ,其中 ,则 表示从 的第 个字符到第 个字符组成的子字符串。
例如若 ,则 ,,因此 (()(
和 ()(()()
都是 的子串。但 )()(
不是该字符串的子串。
字典序的定义
给定两个字符串 和 ,我们说 在字典序上早于 ,当且仅当满足以下任一条件:
- 是 的前缀,且
- 存在最小的 满足 且
在本题中,左括号 '('
比右括号 ')'
更小,即 '(' < ')'
。这与 C++、Java 和 Python 中的字符串比较方式一致。
输入格式
第一行包含一个整数 ,表示测试用例的个数。
接下来的 行中,每行描述一个测试用例,包含字符串 、字符串 和整数 ,它们之间用一个空格隔开。
输出格式
对于每个测试用例,按输入顺序依次输出一行:
- 若 ,输出
- 否则,输出 中字典序第 小的字符串
3
()((())) (()((())))() 3
))(()(((( )())))))( 1
())) )))))(()) 4
()
()
-1
提示
约束条件
设 表示一个输入数据中所有测试用例的字符串 的总长度之和, 类似。
- 每个字符串 和 均由
'('
和')'
组成,且长度均不少于 1
子任务
- (4 分),
- (11 分),
- (16 分),,且 ,
- (25 分),
- (10 分),
- (12 分)
- (9 分)
- (13 分)无额外约束条件