接龙(Word Chain)
题目描述
在玩惯了成语接龙之后,小 J 和他的朋友们发明了一个新的接龙规则。
总共有 n 个人参与这个接龙游戏,第 i 个人会获得一个整数序列 Si 作为他的词库。
一次游戏分为若干轮,每一轮规则如下:
- n 个人中的某个人 p 带着他的词库 Sp 进行接龙。若这不是游戏的第一轮,那么这一轮进行接龙的人不能与上一轮相同,但可以与上上轮或更往前的轮相同。
- 接龙的人选择一个长度在 [2,k] 的 Sp 的连续子序列 A 作为这一轮的接龙序列,其中 k 是给定的常数。若这是游戏的第一轮,那么 A 需要以元素 1 开头,否则 A 需要以上一轮的接龙序列的最后一个元素开头。
- 序列 A 是序列 S 的连续子序列当且仅当可以通过删除 S 的开头和结尾的若干元素(可以不删除)得到 A。
为了强调合作,小 J 给了 n 个参与游戏的人 q 个任务,第 j 个任务需要这 n 个人进行一次游戏,在这次游戏里进行恰好 rj 轮接龙,且最后一轮的接龙序列的最后一个元素恰好为 cj。为了保证任务的可行性,小 J 请来你判断这 q 个任务是否可以完成的,即是否存在一个可能的游戏过程满足任务条件。
输入格式
本题有多组测试数据。
输入的第一行包含一个正整数 T,表示数据组数。
接下来包含 T 组数据,每组数据的格式如下:
第一行包含三个整数 n,k,q,分别表示参与游戏的人数、接龙序列长度上限以及任务个数。
接下来 n 行:
第 i 行包含 (li+1) 个整数 li,Si,1,Si,2,…,Si,li,其中第一个整数 li 表示序列 Si 的长度,接下来 li 个整数描述序列 Si。
接下来 q 行:
第 j 行包含两个整数 rj,cj,描述一个任务。
输出格式
对于每个任务:输出一行包含一个整数,若任务可以完成输出 1,否则输出 0。
样例输入 #1
1
3 3 7
5 1 2 3 4 1
3 1 2 5
3 5 1 6
1 2
1 4
2 4
3 4
6 6
1 1
7 7
样例输出 #1
1
0
1
0
1
0
0
数据范围
对于所有测试数据,保证:
- 1≤T≤5;
- 1≤n≤105,2≤k≤2×105,1≤q≤105;
- 1≤li≤2×105,1≤Si,j≤2×105;
- 1≤rj≤102,1≤cj≤2×105;
- 设 ∑l 为单组测试数据内所有 li 的和,则 ∑l≤2×105。
| 测试点 |
n≤ |
r≤ |
∑l≤ |
q≤ |
特殊性质 |
| 1 |
103 |
1 |
2000 |
103 |
无 |
| 2,3 |
10 |
5 |
20 |
102 |
^ |
| 4,5 |
103 |
10 |
2000 |
103 |
A |
| 6 |
105 |
102 |
2×105 |
105 |
^ |
| 7,8 |
103 |
10 |
2000 |
103 |
B |
| 9,10 |
105 |
102 |
2×105 |
105 |
^ |
| 11,12 |
103 |
10 |
2000 |
103 |
C |
| 13,14 |
105 |
102 |
2×105 |
105 |
^ |
| 15∼17 |
103 |
10 |
2000 |
103 |
无 |
| 18∼20 |
105 |
102 |
2×105 |
105 |
^ |
特殊性质 A:保证 k=2×105。
特殊性质 B:保证 k≤5。
特殊性质 C:保证在单组测试数据中,任意一个字符在词库中出现次数之和均不超过 5。
知识点与难度
本题涉及的知识点从属于 GESP 7级(动态规划、状态优化),难度等级:⭐⭐⭐⭐⭐。
测试点分布
| Subtask |
分值 |
测试点编号 |
说明 |
| 0 |
10 |
1~2 |
样例 |
| 1 |
20 |
3~8 |
小规模 n≤10, sum l≤20, r≤5 / 特殊: k 很大 / 特殊: k≤5 |
| 2 |
15 |
9~11 |
Hack: r=1 / Hack: 同玩家相邻被禁 / Hack: 起始 1 不存在 |
| 3 |
30 |
12~20 |
中规模 n≤1000, r≤10 / 大规模 n,sum l=2e5, r=100 压力 |
| 4 |
25 |
21~25 |
多测随机 n,k,q,r 回归 |