A85869.「十二省联考 2019」字符串问题
NOI/NOI+/CTSC
通过率:0%
时间限制:6.00s
内存限制:1024MB
题目描述
现有一个字符串 S。
Tiffany 将从中划出 na 个子串作为 A 类串,第 i 个(1≤i≤na)为 Ai=S(lai,rai)。
类似地,Yazid 将划出 nb 个子串作为 B 类串,第 i 个(1≤i≤nb)为 Bi=S(lbi,rbi)。
现额外给定 m 组支配关系,每组支配关系 (x,y) 描述了第 x 个 A 类串支配第 y 个 B 类串。
求一个长度最大的目标串 T,使得存在一个串 T 的分割 T=t1+t2+⋯+tk(k≥0)满足:
- 分割中的每个串 ti 均为 A 类串:即存在一个与其相等的 A 类串,不妨假设其为 ti=Aidi。
- 对于分割中所有相邻的串 ti,ti+1(1≤i<k),都有存在一个 Aidi 支配的 B 类串,使得该 B 类串为 ti+1 的前缀。
方便起见,你只需要输出这个最大的长度即可。
特别地,如果存在无限长的目标串(即对于任意一个正整数 n,都存在一个满足限制的长度超过 n 的串),请输出 −1。
输入格式
从标准输入读入数据。
单个测试点中包含多组数据,输入的第一行包含一个非负整数 T 表示数据组数。接下来依次描述每组数据,对于每组数据:
- 第 1 行一个只包含小写字母的字符串 S。
- 第 2 行一个非负整数 na,表示 A 类串的数目。接下来 na 行,每行 2 个用空格隔开的整数。
- 这部分中第 i 行的两个数分别为 lai,rai,描述第 i 个 A 类串。
- 保证 1≤lai≤rai≤∣S∣。
- 接下来一行一个非负整数 nb,表示 B 类串的数目。接下来 nb 行,每行 2 个用空格隔开的整数。
- 这部分中第 i 行的两个数分别为 lbi,rbi,描述第 i 个 B 类串。
- 保证 1≤lbi≤rbi≤∣S∣。
- 接下来一行一个非负整数 m,表示支配关系的组数。接下来 m 行,每行 2 个用空格隔开的整数。
- 这部分中每行的两个整数 x,y,描述一对 (x,y) 的支配关系,具体意义见「题目描述」。
- 保证 1≤x≤na,1≤y≤nb。保证所有支配关系两两不同,即不存在两组支配关系的 x,y 均相同。
输出格式
输出到标准输出。
依次输出每组数据的答案,对于每组数据:
- 一行一个整数表示最大串长。特别地,如果满足限制的串可以是无限长的,则请输出 −1。
输入输出样例
输入#1
3 abaaaba 2 4 7 1 3 1 3 4 1 2 1 abaaaba 2 4 7 1 3 1 7 7 1 2 1 abbaabbaab 4 1 5 4 7 6 9 8 10 3 1 6 10 10 4 6 5 1 2 1 3 2 1 3 3 4 1
输出#1
7 -1 13
说明/提示
| na | nb | ∣S∣ | 测试点 | m | ∣Ai∣≥∣Bj∣ | 其他限制 |
|---|---|---|---|---|---|---|
| ≤100 | ≤100 | ≤104 | 1 | ≤104 | 保证 | 保证所有 ∣Ai∣,∣Bj∣≤100 |
| ≤1000 | ≤1000 | ≤2×105 | 2∼3 | ≤2×105 | 保证 | 无 |
| =1 | ≤2×105 | ≤2×105 | 4 | =nb | 保证 | 无 |
| ≤2×105 | ≤2×105 | ≤2×105 | 5∼6 | ≤2×105 | 保证 | 保证所有 rai+1=lai+1 |
| ≤2×105 | ≤2×105 | ≤2×105 | 7∼8 | ≤2×105 | 保证 | 无 |
| ≤2×105 | ≤2×105 | ≤2×105 | 9∼10 | ≤2×105 | 不保证 | 无 |
为了方便你的阅读,我们把测试点编号放在了表格的中间,请你注意这一点。
表格中的 ∣Ai∣≥∣Bj∣ 指的是任意 B 类串的长度不超过任意 A 类串的长度。
对于所有测试点,保证:T≤100,且对于测试点内所有数据,∣S∣,na,nb,m 的总和分别不会超过该测试点中对应的单组数据的限制的 10 倍。比如,对于第 1 组测试点,就有 ∑na≤10×100=1000 等。特别地,我们规定对于测试点 4,有 T≤10。
对于所有测试点中的每一组数据,保证:1≤∣S∣≤2×105,na,nb≤2×105,m≤2×105。
提示
十二省联考命题组温馨提醒您:
数据千万条,清空第一条。
多测不清空,爆零两行泪。