#P12727. [KOI 2021 Round 2] 公共括号子串字典序

    ID: 12506 Type: RemoteJudge 3000ms 1024MiB Tried: 0 Accepted: 0 Difficulty: 6 Uploaded By: Tags>2021后缀数组 SAKOI(韩国)

[KOI 2021 Round 2] 公共括号子串字典序

题目背景

试题来源:https://koi.or.kr/archives/。中文翻译做了少量本土化修改。

按照署名—非商业性使用—相同方式共享 4.0 协议国际版进行授权。

题目描述

给定两个只由左括号 ( 与右括号 ) 构成的字符串 AABB,以及一个自然数 KK

我们定义集合 S(A,B)S(A, B) 表示:所有既是字符串 AA 的子串、又是字符串 BB 的子串,并且是一个合法括号序列的不同字符串所组成的集合。

你的任务是判断 S(A,B)S(A, B) 的大小是否不少于 KK。如果不小于,则输出 S(A,B)S(A, B)按字典序排列后的第 KK 个字符串;否则,输出 1-1

你需要在一个输入数据中处理 TT 个测试用例。

合法括号序列的定义

一个合法括号序列定义如下:

  • 单个括号对构成的字符串 () 是合法括号序列。
  • XX 是合法括号序列,则 (X)(X) 也是合法括号序列。
  • XXYY 都是合法括号序列,则将它们连接而成的 XYXY 也是合法括号序列。
  • 所有合法括号序列都只能通过上述三条规则构造。

例如:((()(())))(())()() 是合法括号序列,而 (())((()() 都不是。

子串的定义

给定长度为 ll 的字符串 ss 和两个整数 i,ji, j,其中 1ijl1 \leq i \leq j \leq l,则 s[i..j]s[i..j] 表示从 ss 的第 ii 个字符到第 jj 个字符组成的子字符串。

例如若 s=()(()()s = \texttt{()(()()},则 s[1..5]=(()(s[1..5] = \texttt{(()(}s[1..7]=()(()()s[1..7] = \texttt{()(()()},因此 (()(()(()() 都是 ss 的子串。但 )()( 不是该字符串的子串。

字典序的定义

给定两个字符串 s1[1..l1]s_1[1..l_1]s2[1..l2]s_2[1..l_2],我们说 s1s_1 在字典序上早于 s2s_2,当且仅当满足以下任一条件:

  • s1s_1s2s_2 的前缀,且 l1<l2l_1 < l_2
  • 存在最小的 ii 满足 s1[i]s2[i]s_1[i] \ne s_2[i]s1[i]<s2[i]s_1[i] < s_2[i]

在本题中,左括号 '(' 比右括号 ')' 更小,即 '(' < ')'。这与 C++、Java 和 Python 中的字符串比较方式一致。

输入格式

第一行包含一个整数 TT,表示测试用例的个数。

接下来的 TT 行中,每行描述一个测试用例,包含字符串 AA、字符串 BB 和整数 KK,它们之间用一个空格隔开。

输出格式

对于每个测试用例,按输入顺序依次输出一行:

  • S(A,B)<K|S(A, B)| < K,输出 1-1
  • 否则,输出 S(A,B)S(A, B) 中字典序第 KK 小的字符串
3
()((())) (()((())))() 3
))(()(((( )())))))( 1
())) )))))(()) 4
()
()
-1

提示

约束条件

A\sum |A| 表示一个输入数据中所有测试用例的字符串 AA 的总长度之和,B\sum |B| 类似。

  • 1T5000001 \leq T \leq 500\,000
  • 每个字符串 AABB 均由 '('')' 组成,且长度均不少于 1
  • 1K10181 \leq K \leq 10^{18}
  • A500000\sum |A| \leq 500\,000
  • B500000\sum |B| \leq 500\,000

子任务

  1. (4 分)A100\sum |A| \leq 100B100\sum |B| \leq 100
  2. (11 分)A1000\sum |A| \leq 1\,000B1000\sum |B| \leq 1\,000
  3. (16 分)A10000\sum |A| \leq 10\,000B10000\sum |B| \leq 10\,000,且 A=BA = BK=1K = 1
  4. (25 分)A10000\sum |A| \leq 10\,000B10000\sum |B| \leq 10\,000
  5. (10 分)A=BA = BK=1K = 1
  6. (12 分)A=BA = B
  7. (9 分)K=1K = 1
  8. (13 分)无额外约束条件