QOJ.ac

QOJ

Time Limit: 10 s Memory Limit: 1024 MB Total points: 48

#12093. 剑术大师

Statistics

你是一位渴望成为下一任“剑术大师”(Swordmaster)的决斗者。你将通过与对手决斗来争取这一头衔,直到你战胜每一位对手。每位对手随时都可以进行决斗,且对手之间不会互相决斗。

每位决斗者(包括你)至少掌握一种攻击方式和一种防御方式。世界上最多有 $P$ 种攻击与防御的配对;第 $i$ 种防御只能反制第 $i$ 种攻击,而第 $i$ 种攻击也只能被第 $i$ 种防御反制。可能存在没有任何决斗者掌握的攻击和/或防御。你可以根据需要多次使用你掌握的任何攻击或防御;它们不会被“消耗”。

以下是与对手进行单场决斗的规则:

  • 作为渴望成为剑术大师的你,总是先手攻击。你选择一种你掌握的攻击。如果对手掌握相应的防御,他们可以选择使用它。如果他们不掌握该防御,或者他们选择不使用它,那么他们就不会进行防御。
  • 然后,对手选择一种他们掌握的攻击。如果你掌握相应的防御,你可以选择使用它。如果你不掌握该防御,或者你选择不使用它,那么你就不会进行防御。
  • 如果你成功防御而对手没有,你就赢得了这场决斗!否则,你没有获胜,但你成为剑术大师的征程可以继续。

你可以进行任意次数的决斗,包括与同一位对手进行多次决斗,无论之前决斗的结果如何。你不需要提前确定完整的决斗计划;你可以根据已经发生的情况做出下一个决定。一旦你至少战胜过每一位对手一次,你就成为了剑术大师!

你是一位学习能力特别强的人。在每场决斗后,无论决斗结果如何,你都可以将对手使用的攻击和防御(如果有)加入到你自己掌握的攻击/防御集合中。(注意:如果对手对你使用了你未知的防御,你在该场决斗中无法学会它,因此你无法在该场决斗中用它来反制对手的攻击。)只有你拥有这一优势;你的对手所掌握的攻击和防御永远不会改变。

此外,在你战胜某位对手后,在进行下一场决斗之前,该对手会教给你所有他们掌握而你尚未掌握的攻击和防御。(一旦他们输给了你,如果你最终成为了剑术大师,这对他们来说会更好看!)

你知道每位对手掌握哪些攻击和防御。如果你做出最优选择,是否有可能保证你一定会成为剑术大师,无论你的对手做出什么选择?

输入格式

输入的第一行包含测试用例的数量 $T$。接下来是 $T$ 个测试用例。 每个测试用例的第一行包含两个整数 $N$ 和 $P$:决斗者的数量(包括你)以及世界上攻击/防御配对的最大数量。 然后是 $N$ 组,每组三行。这些组中的第 $i$ 组代表其中一位决斗者;特别地,第一组代表你。每组具有以下结构:

  1. 一行包含两个整数 $Attacksi$ 和 $Defensesi$:第 $i$ 位决斗者掌握的不同攻击和防御的数量。
  2. 一行包含 $Attacksi$ 个不同的整数 $Aij$,按升序排列:第 $i$ 位决斗者掌握的攻击标识。
  3. 一行包含 $Defensesi$ 个不同的整数 $Dij$,按升序排列:第 $i$ 位决斗者掌握的防御标识。

输出格式

对于每个测试用例,输出一行 Case #x: y,其中 $x$ 是测试用例编号(从 1 开始),如果可以保证你将成为剑术大师(如题目描述中所述),则 $y$ 为 YES,否则为 NO

数据范围

$1 \le T \le 100$ $2 \le N \le 1000$ $1 \le P \le 1000$ $1 \le Attacksi \le P$,对于所有 $i$ $1 \le Defensesi \le P$,对于所有 $i$ $1 \le Aij < Ai(j+1) \le P$,对于所有 $i$ 和 $j$ $1 \le Dij < Di(j+1) \le P$,对于所有 $i$ 和 $j$ 所有 $Attacksi$ 的总和加上所有 $Defensesi$ 的总和不超过 $50000$ 时间限制:每个测试集 10 秒 内存限制:1GB

样例

样例输入 1

5
2 2
1 2
1
1 2
2 1
1 2
1
2 2
1 1
1
2
1 1
2
1
2 5
1 1
2
3
2 1
2 4
2
3 5
3 2
1 2 3
3 4
2 4
3 4
2 3 4 5
2 5
4 5
1 2 3 4 5
4 4
1 1
1
4
2 3
2 3
2 3 4
1 3
4
1 2 4
1 3
4
1 3 4

样例输出 1

Case #1: NO
Case #2: YES
Case #3: NO
Case #4: NO
Case #5: YES

说明

注意,最后四个样例用例不会出现在测试集 1 中。

在样例 1 中,只要你的对手一直选择防御 1 和攻击 1,你就无法赢得决斗。无法保证你的对手会选择攻击 2 或选择不使用防御 1,因此无法保证你一定会成为剑术大师。

在样例 2 中,你掌握攻击 1 和防御 2,而你的(唯一)对手掌握攻击 2 和防御 1。以下策略保证能让你成为剑术大师:

  • 在第一场决斗中,你必须选择攻击 1;对手可能会用防御 1 进行防御。然后,对手必须选择攻击 2;你应该选择防御 2。
  • 如果对手没有防御,那么你就赢了,现在你是剑术大师。
  • 否则,你没有赢,但你随后学会了攻击 2 和防御 1。然后,与该对手开始第二场决斗。这一次,选择攻击 2;对手无法防御。再一次,对手必须选择攻击 2;你应该选择防御 2。你赢了,现在你是剑术大师。

在样例 3 中,在第一场决斗中,如果你的对手总是选择攻击 4,你将永远无法防御,因为没有人掌握该攻击的防御。所以,你不可能成为剑术大师。注意,本题中可能存在世界上存在但没有任何决斗者掌握的攻击和/或防御。

在样例 4 中,有一位对手掌握了所有的防御,所以你无法保证能战胜他们(他们必须表现得“友好”而不进行防御才行!)

以下是样例 5 的一种保证获胜的策略:

  1. 与第一位对手决斗。你必须选择攻击 1,他们无法防御。我们假设他们选择攻击 2。(如果他们选择攻击 3,同构的策略同样有效。)你无法防御,虽然没有赢得决斗,但你学会了攻击 2。
  2. 与第三位对手决斗,使用攻击 2 和防御 4 以保证获胜。你学会了攻击 4(你永远不会使用它)以及防御 1 和 3。
  3. 与第二位对手决斗,使用攻击 2。你保证能学会防御 2:要么对手会用它来反制你,要么他们不使用它而你获胜(并学会他们所有的攻击和防御)。
  4. 再次与第一位对手决斗,选择攻击 1。现在,无论他们使用什么攻击,你都能防御,并且你获胜。你学会了攻击 3。
  5. 如果之前还没有战胜过第二位对手,再次与第二位对手决斗,使用攻击 3。

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.