QOJ.ac

QOJ

時間限制: 1 s 記憶體限制: 2048 MB 總分: 100 互動

#2475. 银行抢劫

统计

每天,劫匪计划在该地区抢劫一家银行。由于卧底情报人员的工作,侦探们在每天早上 6 点前就能获知劫匪当天具体要抢劫哪家银行。只要银行里有一名侦探,就足以震慑劫匪,因此侦探们希望明智地规划他们的位置。抢劫计划在早上 8 点银行开门后的白天进行,如果银行里没有侦探,抢劫总是会成功。遗憾的是,侦探的数量并不多,因此可能没有足够的侦探来保障所有银行的安全。为了确保侦探有效,任何时候任何银行最多只能有一名侦探。侦探只能在早上 6 点到 8 点之间离开一家银行并前往另一家银行。

只要有足够的天数,任何侦探都能通过 2 小时的中转从任何一家银行移动到任何其他银行。由于旅行限制(主要是时间),他们无法自由移动,只能在彼此靠近的银行之间移动。该地区非常特殊,因为符合上述限制的靠近银行对的数量最少。此外,没有银行恰好与两家其他银行靠近。

现在,有一个计算机模拟任务:确定劫匪是否能在一年内成功抢劫至少一次。该模拟作为一种计算机游戏与预先编程的裁判进行对抗,在现实中具有重大后果。在游戏中,攻击者代表劫匪,防御者管理侦探。

在开始时,模拟程序会获得靠近银行之间的连接系统以及可用的侦探数量。然后,模拟程序选择扮演攻击者还是防御者。裁判自动采取相反的角色。接下来,防御者根据自己的选择将给定数量的侦探放置在银行中。

接下来,游戏按回合进行。在一回合中,攻击者宣布一家银行,然后防御者将每名侦探移动最多一个连接。防御者的目标是选择移动方式,使得在回合结束时,被宣布的银行里有一名侦探。如果在回合的所有移动结束后,被宣布的银行里没有侦探,攻击者立即赢得游戏。否则,防御者成功防守该回合,并进入下一回合。如果防御者能成功防守一年(365 回合),他们就赢得游戏。在游戏过程中,每名侦探的位置对攻击者和防御者都是已知的。

你需要编写的模拟程序的目标是明智地选择一个角色,以便你能赢得游戏。

输入格式

第一行包含值 $B$ 和 $D$ ($4 \le B \le 100, 0 \le D \le B$),分别表示银行数量和侦探数量。银行由整数 $0, 1, \dots, B-1$ 标记。接下来的 $B-1$ 行,每行包含一对整数 $b_i$ 和 $c_i$ ($0 \le b_i, c_i \le B-1$),表示两家靠近的银行 $b_i$ 和 $c_i$ 之间的连接。

输出格式

读取输入后,如果你选择攻击,则打印一行字符串 ATTACK。否则,打印一行字符串 DEFEND,并在下一行打印 $D$ 个不同的索引(以任意顺序),表示侦探最初所在的银行。其余的交互过程将以交互方式进行。

交互

该模拟在所谓的交互模式下进行评估,这意味着接收到的输入取决于迄今为止产生的输出。裁判的输出是模拟的输入,反之亦然。

在打印对裁判输入的每次响应后,模拟程序必须刷新输出缓冲区。例如,在 C++ 中可以使用 fflush(stdout)cout.flush(),在 Java 中使用 System.out.flush(),或者在 Python 中使用 stdout.flush()。此外,它永远不应尝试读取超过保证准备好的输入数据,因为这可能导致程序无限挂起。特别要注意,不要调用类似 scanf("%d ")scanf("%d\n") 的函数,因为这些格式会尝试扫描后续的任何空白字符。相反,只需使用不带尾随空白字符的 scanf("%d")

在你选择角色并打印相应输出后,以下交换过程将重复进行最多 365 次:攻击者输出他们选择攻击的银行索引 $0 \le v \le B-1$。然后,防御者输出一个整数 $k$,接着输出 $k$ 对 $b_i, c_i$ ($0 \le b_i, c_i \le B-1$),每一对代表一名侦探从银行 $b_i$ 到银行 $c_i$ 的移动。侦探只能沿着靠近银行之间的连接移动。攻击者通过输出 $-1$ 来结束攻击序列。防御者可以通过结束程序来认输。

在此交换中,一方的输出始终是另一方的输入。

样例

样例输入 1

4 3
0 1
0 2
0 3
2
3
-1

样例输出 1

DEFEND
0 1 2
0
2 1 0 0 3

样例输入 2

4 1
0 1
0 2
0 3
0
1 0 1

样例输出 2

ATTACK
1
2

说明

为清晰起见,上述数据是交错显示的,以说明模拟程序与裁判之间的交互顺序。请注意,实际数据中不会有空行,模拟输出中也不得有任何空行。

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.