QOJ.ac

QOJ

时间限制: 10 s 内存限制: 1024 MB 总分: 32

#12276. 育儿合伙人

统计

Cameron 和 Jamie 是一对长期的生活伴侣,最近他们刚为人父母!照顾婴儿虽然令人兴奋,但也充满挑战。鉴于两位家长都有科学头脑,他们决定用科学的方法来照顾婴儿。

Cameron 和 Jamie 正在制定日常作息,需要决定在每个时间段由谁主要负责照顾婴儿。他们在整个关系中一直是平等的伙伴,他们不想改变这一点,因此他们决定每人每天正好负责 12 小时(720 分钟)。

Cameron 和 Jamie 还有其他他们需要或想要独自完成的活动。Cameron 有 $A_C$ 个这样的活动,Jamie 有 $A_J$ 个。这些活动每天都在相同的时间进行。Cameron 的活动与 Jamie 的活动互不重叠,因此至少有一位家长总是有空照顾婴儿。

Cameron 和 Jamie 希望制定一个每日婴儿护理时间表,满足以下条件:

  • 预定的婴儿护理时间不得干扰预定的活动。也就是说,在 Cameron 进行活动期间,必须由 Jamie 负责照顾婴儿,反之亦然。
  • Cameron 和 Jamie 每人必须正好被分配 720 分钟。
  • 交换次数——即负责照顾婴儿的人从一方换到另一方的次数——必须尽可能少。

例如,假设 Jamie 和 Cameron 各有一个活动:Jamie 在上午 9 点到 10 点有一个活动,Cameron 在下午 2 点到 3 点有一个活动。一种可能但非最优的时间表是:Jamie 在午夜到凌晨 6 点以及中午到下午 6 点负责照顾婴儿,Cameron 在凌晨 6 点到中午以及下午 6 点到午夜负责照顾婴儿。这满足了前两个条件,总共需要 4 次交换,分别发生在午夜、凌晨 6 点、中午和下午 6 点。如果午夜发生了交换,它只被计为一次,而不是零次或两次。

一个更好的选择是让 Cameron 从午夜到中午负责照顾婴儿,Jamie 从中午到午夜负责照顾婴儿。这个时间表也满足前两个条件,但它只使用了 2 次交换,这是可能的最小值。

给定 Cameron 和 Jamie 的活动列表以及上述限制,每日时间表中可能的最小交换次数是多少?

输入格式

输入的第一行包含测试用例的数量 $T$。接下来是 $T$ 个测试用例。每个测试用例的第一行包含两个整数 $A_C$ 和 $A_J$,分别表示 Cameron 和 Jamie 的活动数量。接下来有 $A_C + A_J$ 行。前 $A_C$ 行每行包含两个整数 $C_i$ 和 $D_i$。Cameron 的第 $i$ 个活动在午夜开始后的第 $C_i$ 分钟开始,在午夜开始后的第 $D_i$ 分钟结束(耗时正好 $D_i - C_i$ 分钟)。最后 $A_J$ 行每行包含两个整数 $J_i$ 和 $K_i$,表示 Jamie 的一个活动的开始和结束时间,单位为从午夜开始计算的分钟数(格式与 Cameron 的相同)。没有任何活动跨越两天,也没有两个活动重叠(除了一个活动可能在另一个活动结束时立即开始,但此时仍可能发生交换)。

输出格式

对于每个测试用例,输出一行 Case #x: y,其中 $x$ 是测试用例编号(从 1 开始),$y$ 是题目描述中要求的最小可能交换次数。

数据范围

时间限制:每个测试集 20 秒。 内存限制:1 GB。 $1 \le T \le 100$。 $0 \le C_i < D_i \le 24 \times 60$,对于所有 $i$。 $0 \le J_i < K_i \le 24 \times 60$,对于所有 $i$。 所有区间 $\{[C_i, D_i) \text{ 对于所有 } i\} \cup \{[J_i, K_i) \text{ 对于所有 } i\}$ 中任意两个区间的交集为空。 (区间左闭右开,这确保了两个完全连续的区间之间没有空隙,但也不会重叠。) 所有 $\{D_i - C_i \text{ 对于所有 } i\}$ 的总和 $\le 720$。 所有 $\{K_i - J_i \text{ 对于所有 } i\}$ 的总和 $\le 720$。

小型数据集(测试集 1 - 可见)

$0 \le A_C \le 2$。 $0 \le A_J \le 2$。 $1 \le A_C + A_J \le 2$。

大型数据集(测试集 2 - 隐藏)

$0 \le A_C \le 100$。 $0 \le A_J \le 100$。 $1 \le A_C + A_J \le 200$。

样例

输入 1

5
1 1
540 600
840 900
2 0
900 1260
180 540
1 1
1439 1440
0 1
2 2
0 1
1439 1440
1438 1439

输出 1

Case #1: 2
Case #2: 4
Case #3: 2
Case #4: 4
Case #5: 6

说明

注意,Case #4 和 #5 不会出现在小型数据集中。

Case #1 是题目描述中提到的例子。

在 Case #2 中,Jamie 必须覆盖 Cameron 的所有活动时间,然后 Cameron 必须覆盖所有剩余时间。这个时间表需要四次交换。

在 Case #3 中,午夜发生了一次从 Cameron 到 Jamie 的交换。无论父母如何分配剩余的 1438 分钟非活动时间,都必须至少有一次从 Jamie 到 Cameron 的交换,并且没有理由增加超过这个次数的交换。

在 Case #4 中,请注意同一位家长或不同家长之间可能存在背靠背的活动。午夜没有交换,因为 Cameron 在午夜之前和之后都有活动。然而,时间表需要在 Jamie 的活动之间为 Cameron 增加一些时间,总共需要 4 次交换。请注意,在第 2 分钟到第 1438 分钟之间的某个位置增加一个长度为 718 的 Cameron 时间段是最优的,但增加的时间段的具体位置不会影响交换次数,因此存在多个最优时间表。

在 Case #5 中,一个可能的最优时间表是将 Cameron 分配到(以分钟计)100-200、500-620 和 900-1400 的时间段。

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.