QOJ.ac

QOJ

시간 제한: 6.0 s 메모리 제한: 2048 MB 총점: 100

#15873. 团队训练

통계

Dr. Mitko Dimitrov 正在筹划队内训练,以帮助他的学生们备战下一届区域赛。他希望所有学生都能获得共同训练的经验,以便交流知识,并避免整个队伍同时毕业而导致来年无人可用的尴尬局面。

为了便于训练,他预订了一个双区房间,学生们可以在两个独立的队伍(A 队 and B 队)中进行训练。这使他能够同时监督两支队伍,并指导学生更换队伍,从而让他们获得与不同人合作的经验。训练将分为若干个时长一小时的场次,他可以指导少数学生在各场次之间的休息时间更换队伍。然而,他希望在第一场和最后一场训练中,所有人都在 A 队,以便在开始时讲解训练内容,并在结束时进行总结。

每个学生根据其特长可以被归类为解题手(problem solver)或代码手(problem coder)之一(但不能同时是两者)。为了减少人员流动,Dr. Dimitrov 在场次之间的休息时间里,每种类型的学生至多只会指导一名更换队伍。

Dr. Dimitrov 还准备了少量的挑战题,他计划在训练期间的不同时间点将这些题目分发给特定的队伍。由于题目的难度各不相同,他预先确定了在某场训练中解决该题所需的解题手和代码手的数量。此外,解决该题可能还需要一个总人数的下限,该下限可能大于所需解题手和代码手数量之和。Dr. Dimitrov 希望合理安排队伍人员,使得所有挑战题在训练期间都能被成功解决。

请注意,一个队伍在同一场次中可能会被分配多道挑战题,如果该队伍的人员构成满足每道题的要求,他们就可以在同一场次中解决所有这些题目。例如,在样例 1 中,一个拥有 6 名解题手和 5 名代码手的队伍可以在同一场次中解决第二道和第三道题目。

Dr. Dimitrov 有多少种指导学生更换队伍的方式,以确保满足所有约束条件?输出答案对 $10^9 + 7$ 取模的结果。如果存在某个场次,在一种方案中某个特定的学生被要求更换队伍,而在另一种方案中没有,则这两种方案被视为是不同的。

输入格式

第一行包含 4 个整数:$N$ ($3 \le N \le 10^{18}$),表示训练的场次数量;$P$ ($1 \le P \le 5$),表示挑战题的数量;$S$ ($1 \le S \le 35$),表示解题手的数量;$C$ ($1 \le C \le 35$),表示代码手的数量。

接下来的 $P$ 行,每行描述一道挑战题。每行以一个整数 $t_i$ ($1 < t_i < N$) 和一个字符 $g_i$ ($g_i \in \{A, B\}$) 开始,表示第 $i$ 道挑战题在第 $t_i$ 场训练中被分配给队伍 $g_i$。请注意,Dr. Dimitrov 不会在第一场和最后一场训练中分发挑战题。

该行的其余部分包含三个整数,描述解决该挑战题所需的人员:$s_i$ ($0 \le s_i \le S$)、$c_i$ ($0 \le c_i \le C$) 和 $b_i$ ($\max(1, s_i + c_i) \le b_i \le S + C$),表示第 $i$ 道挑战题需要 $s_i$ 名解题手、$c_i$ 名代码手,且总共至少需要 $b_i$ 名解题手和代码手。

挑战题按场次非递减的顺序给出。

输出格式

输出在满足约束条件的前提下,Dr. Dimitrov 指导学生更换队伍的方案数对 $10^9 + 7$ 取模后的结果。

样例

输入样例 1

4 3 7 5
2 B 1 1 2
3 A 0 5 6
3 A 6 2 8

输出样例 1

70

输入样例 2

8 2 5 3
6 A 4 2 7
7 B 2 1 3

输出样例 2

0

输入样例 3

10 2 3 4
3 A 1 2 4
6 B 2 1 3

输出样例 3

289313785

输入样例 4

1000000000000000000 2 4 4
500000000000000000 A 2 1 4
500000000000000000 B 1 2 4

输出样例 4

759384011

说明

样例 1 说明

在此测试用例中,有 7 名解题手和 5 名代码手。在第 1 场训练中,所有人都在 A 队。在第 2 场训练中,B 队有一道挑战题,需要每种类型的学生各至少 1 名。Dr. Dimitrov 必须此时选择 7 名解题手中的 1 名和 5 名代码手中的 1 名派往 B 队。在第 3 场训练中,前往 B 队的代码手必须返回 A 队,以协助解决那里的两道挑战题中的第一道。前往 B 队的解题手不需要立即返回,因此他们可以在第 3 场或第 4 场训练时返回 A 队。在第 4 场训练中,所有人再次聚在一起。

答案为 $7 \cdot 5 \cdot 2 = 70$(考虑选择哪位解题手和哪位代码手前往 B 队,以及解题手在什么时间返回 A 队)。

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.