QOJ.ac

QOJ

Time Limit: 8.0 s Memory Limit: 2048 MB Total points: 100

#15875. 狐狸先生,几点了?

Statistics

游戏“老狼老狼几点了?”(What Time Is It Mr. Fox?)是一个受欢迎的儿童游戏。一个孩子扮演狼,其余的孩子扮演羊。游戏在一个长度远大于宽度的场地上进行,因此我们假设游戏是在一条长度为 $L$ 微米的线段上进行的。位置 $0$ 是左侧,位置 $L$ 是右侧。

羊最初位于线段上的位置 $0$,而狼最初位于位置 $L/2$。游戏进行方式如下:

  • 羊群喊出:“老狼老狼几点了?”(What time is it Mr. Fox?)。
  • 狼宣布时间,可以是 $X$ 点(其中 $X \in \{1, 2, \dots, 11\}$),或者是“开饭啦!”(lunch time!)。
  • 如果狼宣布的是 $X$ 点,那么所有羊向右移动 $X$ 步,然后游戏继续进行下一次喊话。
  • 但如果狼宣布的是“开饭啦!”,羊群就会奔向距离它们最近的场地一侧。如果它们恰好位于场地正中间,它们会奔向右侧。
  • 狼最多选择一只羊进行追赶。如果狼在羊到达其奔向的一侧之前抓住了它,那么这只羊在接下来的游戏里就被淘汰。
  • 所有成功到达场地右侧的羊在接下来的游戏里都是安全的,不再参与游戏。
  • 所有到达场地左侧的羊仍然留在游戏中。
  • 在所有羊跑完之后,狼回到场地的中心,游戏继续进行,但只有留在左侧的羊继续参与。

每只羊 $i$ 对于每个可能的 $X \in \{1, 2, \dots, 11\}$ 都有不同的步长 $s_{i,X}$。因此,当狼宣布 $X$ 点时,羊 $i$ 会向场地右侧移动恰好 $X \cdot s_{i,X}$ 微米。如果这使它们到达或超过了右侧,它们会停在位置 $L$,并在下一次狼喊“开饭啦!”时被宣布安全。这些步长对某只羊来说可能不是递增的,例如,一只羊可能在 2 点时迈出两步较大的步子,但在 3 点时迈出三步微小的步子。

所有的羊以相同的速度奔跑,而狼的奔跑速度恰好是羊的两倍。因此,如果狼选择追赶一只距离其奔向的一侧还有 $D$ 微米的羊,如果 $L < 4D$,狼就会抓住这只羊;否则,这只羊将成功到达该侧而不会被抓住。

每次“开饭啦!”,狼会根据以下规则决定追赶哪只羊:

  • 如果狼能抓住一只奔向右侧的羊,狼会选择其中编号 $i$ 最小的那只。
  • 否则,如果狼能抓住一只奔向左侧的羊,狼会选择其中编号 $i$ 最小的那只。
  • 否则,狼选择不追赶任何羊,所有羊都将成功到达它们奔向的一侧。

你将获得游戏中狼喊话的序列。你的任务是确定在每次“开饭啦!”喊话后,哪些羊到达了右侧,以及哪只羊被抓住了。

输入格式

输入的第一行包含三个整数 $N$($1 \le N \le 200\,000$)、$M$($1 \le M \le 200\,000$)和 $L$($2 \le L \le 10^8$),分别表示羊的数量、指令的数量以及场地的长度。羊的编号为 $1$ 到 $N$(包含 $1$ 和 $N$)。

接下来的 $N$ 行,每行包含恰好 11 个整数。第 $i$ 行的第 $X$ 个值是 $s_{i,X}$($1 \le s_{i,X} \le 10^8$),即当狼喊 $X$ 点时,羊 $i$ 向前移动的步长。

最后是 $M$ 行,每行包含一个 $1$ 到 $12$ 之间的整数。第 $j$ 个数表示狼的喊话:如果数字 $X$ 在 $1$ 到 $11$ 之间,表示 $X$ 点;如果 $X = 12$,表示“开饭啦!”。

保证 $L$ 是偶数,最多有 20 次“开饭啦!”喊话,且最后一次喊话一定是“开饭啦!”。

输出格式

对于每次“开饭啦!”喊话,输出两行。

第一行应包含在此次喊话后到达右侧的羊的编号列表。这些编号应按升序给出。如果在此次喊话中没有羊到达右侧,则输出 None

第二行应包含在此次喊话中被狼抓住的羊的编号。如果狼在此次喊话中没有抓住任何羊,则输出 None

样例

输入样例 1

2 6 16
1 1 1 1 1 1 1 1 1 1 1
1 2 1 2 1 2 1 2 1 2 1
4
1
12
6
6
12

输出样例 1

None
2
1
None

输入样例 2

2 4 10
1 1 1 1 1 1 1 1 1 1 1
1 2 1 2 1 2 1 2 1 2 1
2
4
10
12

输出样例 2

1 2
None

输入样例 3

3 5 20
1 1 1 1 1 1 1 1 1 1 1
1 2 1 2 1 2 1 2 1 2 1
3 3 3 3 3 3 3 3 3 3 3
10
12
10
10
12

输出样例 3

2 3
1
None
None

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.