QOJ.ac

QOJ

実行時間制限: 30.0 s メモリ制限: 256 MB 満点: 100

#17373. 后缀重构

統計

给定一个长度为 $n$ 的文本 $s[1..n]$,我们通过提取其所有后缀并按字典序排序来创建其后缀数组:

$$s[1..n], s[2..n], \dots, s[n..n]$$

排序后,我们得到一个排好序的后缀列表:

$$s[p(1)..n], s[p(2)..n], \dots, s[p(n)..n]$$

并将序列 $p(1), p(2), \dots, p(n)$ 称为 $s[1..n]$ 的后缀数组。例如,如果 $s = \text{abbaabab}$,则所有后缀的排序列表为:

$$\text{aabab}, \text{ab}, \text{abab}, \text{abbaabab}, \text{b}, \text{baabab}, \text{bab}, \text{bbaabab}$$

其后缀数组为 $4, 7, 5, 1, 8, 3, 6, 2$。

众所周知,可以在线性时间内构建该数组。然而,你的任务完全不同:给定 $p(1), p(2), p(3), \dots, p(n)$,你需要检查是否存在至少一个由英文小写字母组成的文本,使得该序列是它的后缀数组。如果存在,输出任意一个这样的文本。否则,输出 $-1$。

输入格式

输入包含多个后缀数组的描述。

第一行包含描述的数量 $t$ ($t \le 100$)。

每个描述以一行开始,包含文本和数组的长度 $n$ ($1 \le n \le 500000$)。

下一行包含整数 $p(1), p(2), \dots, p(n)$。

你可以假设 $1 \le p(i) \le n$ 且没有重复的 $p(i)$ 值。

输入文件的总大小不会超过 50MB。

输出格式

对于每个测试用例,输出任意一个能够产生给定后缀数组的文本。如果不存在这样仅由英文小写字母组成的文本,则输出 $-1$。

样例

输入样例 1

5
2
1 2
2
2 1
3
2 3 1
6
3 4 5 1 2 6
14
3 10 2 12 14 5 13 4 1 8 6 11 7 9
7
5 1 7 4 3 2 6

输出样例 1

ab
aa
bab
suffix
reconstruction
issofun

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.