本题是本轮比赛中最难理解的问题。如果你是 Code Jam 的新手,建议先尝试解决其他问题。
题目描述
Naomi 和 Ken 有时会一起玩游戏。在游戏开始前,他们每人都会得到 $N$ 个外观相同的木块,质量在 0.0kg 到 1.0kg(不含)之间。所有木块的重量各不相同。他们可以用这些木块玩很多种游戏,但他们通常玩一种叫“战争”(War)的游戏。战争的规则如下:
- 每个玩家称量自己所有木块的重量,因此每个玩家都知道自己所有木块的重量,但不知道对方木块的重量。
- 他们重复以下过程 $N$ 次:
- Naomi 选择她自己的一个木块,质量为
Chosen_Naomi。 - Naomi 告诉 Ken 她所选木块的质量。
- Ken 选择他自己的一个木块,质量为
Chosen_Ken。 - 他们将各自的木块放在天平的两端,较重的一方得一分。
- 两个木块在火中被销毁。
- Naomi 选择她自己的一个木块,质量为
Naomi 对“战争”游戏有了三点认识。首先,她意识到自己经常输。其次,她意识到 Ken 有一种独特的策略,可以在不假设 Naomi 策略的情况下最大化自己的得分,而且 Ken 总是使用这种策略。第三,她意识到自己讨厌输。Naomi 决定不再玩“战争”,而是玩一种她称之为“欺骗性战争”(Deceitful War)的游戏。欺骗性战争的妙处在于 Ken 会以为他们在玩“战争”!
以下是“欺骗性战争”的规则,与“战争”的区别已加粗:
- 每个玩家称量自己所有木块的重量。Naomi 还在 Ken 不注意时称量了 Ken 的木块,因此 Naomi 知道所有木块的重量,而 Ken 只知道自己木块的重量。
- 他们重复以下过程 $N$ 次:
- Naomi 选择她自己的一个木块,质量为
Chosen_Naomi。 - Naomi 告诉 Ken 一个 0.0kg 到 1.0kg(不含)之间的数字
Told_Naomi。 Ken 以为他们在玩“战争”,所以他认为 Naomi 刚才告诉他的数字就是Chosen_Naomi。 - Ken 选择他自己的一个木块,质量为
Chosen_Ken。 - 他们将各自的木块放在天平的两端,较重的一方得一分。
- 两个木块在火中被销毁。
- Naomi 选择她自己的一个木块,质量为
Naomi 不想让 Ken 发现她没有在玩“战争”;因此,当她选择要出的木块以及要告诉 Ken 的质量时,她必须确保天平不会揭露 Chosen_Naomi $\neq$ Told_Naomi。换句话说,她必须做出决策,使得:
Chosen_Naomi > Chosen_Ken 当且仅当 Told_Naomi > Chosen_Ken;并且
Told_Naomi 不等于 Ken 任何木块的质量,因为 Ken 知道那是不可能的。
看起来 Naomi 可能无法通过欺骗赢得额外的分数,因为 Ken 可能会发现她并没有在玩“战争”;但 Naomi 知道 Ken 认为双方都在玩“战争”,她知道 Ken 知道什么,并且她知道 Ken 总是会遵循他那套独特的“战争”最优策略,所以她总是能预测 Ken 会出什么牌。
你将获得 Naomi 和 Ken 最初拥有的木块质量。Naomi 将以最优方式进行“欺骗性战争”以获得最高分数。Ken 将以最优方式进行“战争”以获得最高分数(假设双方都在玩“战争”)。Naomi 的得分会是多少?如果她以最优方式玩“战争”,她的得分又会是多少?
样例说明
如果每人只剩下一个木块,Naomi 有 0.5kg,Ken 有 0.6kg,那么 Ken 肯定会得分。Naomi 不能说她的数字 $\ge$ 0.6kg,否则当天平显示 Ken 的木块更重时,Ken 就会知道她没有在玩“战争”。
如果每人剩下两个木块,Naomi 有 [0.7kg, 0.2kg],Ken 有 [0.8kg, 0.3kg],那么 Naomi 可以选择她的 0.2kg 木块,并通过告诉 Ken 她选择了一个 0.6kg 的木块来欺骗他。Ken 认为 Naomi 在说实话(就像“战争”游戏那样),并会出他的 0.8kg 木块来得分。Ken 被骗了,但他永远不会意识到,因为天平显示他的 0.8kg 木块确实如他所料比 Naomi 出的木块重。现在 Naomi 可以出她的 0.7kg 木块,告诉 Ken 它是 0.7kg,并得一分。如果 Naomi 玩的是“战争”而不是“欺骗性战争”,那么 Ken 会得两分,Naomi 会得零分。
输入格式
输入的第一行包含测试用例的数量 $T$。接下来是 $T$ 个测试用例。每个测试用例的第一行包含一个整数 $N$,表示每个玩家拥有的木块数量。接下来一行包含 $N$ 个空格分隔的实数:Naomi 木块的质量(单位:kg)。最后一行包含 $N$ 个空格分隔的实数:Ken 木块的质量(单位:kg)。
给 Ken 和 Naomi 的每个质量都表示为 0,后跟小数点,再后跟 1-5 位数字。尽管输入中所有数字小数点后都有 1-5 位数字,但 Ken 和 Naomi 并不知道这一点;所以 Naomi 仍然可以告诉 Ken 她出的木块质量为 0.5000001kg,而 Ken 没有理由不相信她。
输出格式
对于每个测试用例,输出一行 "Case #$x$: $y$ $z$",其中 $x$ 是测试用例编号(从 1 开始),$y$ 是 Naomi 以最优方式进行“欺骗性战争”时的得分,$z$ 是 Naomi 以最优方式进行“战争”时的得分。
数据范围
$1 \le T \le 50$。 所有给 Ken 和 Naomi 的质量都是不同的,且在 0.0 到 1.0(不含)之间。
子任务 1
$1 \le N \le 10$。
子任务 2
$1 \le N \le 1000$。
样例
样例输入 1
4 1 0.5 0.6 2 0.7 0.2 0.8 0.3 3 0.5 0.1 0.9 0.6 0.4 0.3 9 0.186 0.389 0.907 0.832 0.959 0.557 0.300 0.992 0.899 0.916 0.728 0.271 0.520 0.700 0.521 0.215 0.341 0.458
样例输出 1
Case #1: 0 0 Case #2: 1 0 Case #3: 2 1 Case #4: 8 4