QOJ.ac

QOJ

시간 제한: 3.0 s 메모리 제한: 256 MB 총점: 100

#18444. bit gisect

통계

程序员 Vasya 正在使用 Bit,这是一个用于存储代码的版本控制系统。Bit 中的修改历史可以看作一个有向无环图(DAG)。该图的节点被称为“版本”(revisions)。当 Vasya 想要修改代码时,他可以基于任意版本 $A$ 进行修改,从而产生一个新版本 $D$。在这种情况下,我们称版本 $D$ 依赖于版本 $A$。Bit 中的每个此类依赖关系都表示为从版本节点 $A$ 指向版本节点 $D$ 的一条有向边。

合并(Merger)是 Bit 中的一种特殊版本类型:Vasya 可以将任意两个版本 $A$ 和 $B$ 合并为一个新版本 $D$。在这种情况下,版本 $D$ 将依赖于两个版本:$A$ 和 $B$。仓库中还包含一个唯一的“初始”(initial)版本:它是唯一不依赖于任何其他版本的版本。Bit 中的所有其他版本都依赖于一个或多个其他版本。Vasya 已经完成了他的项目开发:有且仅有一个版本没有任何依赖它的版本(即没有后继节点)。

但有一天,事情出了差错,代码中出现了 bug。Vasya 正在努力寻找它们。Vasya 的 bug 的表现如下:如果一个 bug 出现在版本 $A$ 中,它会影响 Bit 图中从 $A$ 可达的所有版本:版本 $A$ 本身、所有依赖于 $A$ 的版本、所有依赖于“依赖 $A$ 的版本”的版本,依此类推。为了找到 bug,Vasya 可以切换到不同的版本并检查该版本中是否存在 bug,从而缩小嫌疑范围。最终,他将找到含有该 bug 的最初版本(即该 bug 首次出现的源头版本)。

Vasya 接连不断地收到用户的 bug 报告,他必须一个接一个地找出所有这些 bug。请帮助 Vasya 尽快修复代码。

下图展示了一个包含 9 个版本的示例。版本 1 是初始版本。版本 7、8 和 9 是合并版本,每个版本都依赖于另外两个版本。产生 bug 的版本 2 以及受该 bug 影响的所有依赖版本均用灰色标出。

交互

这是一道交互题。你将与一个特殊的程序——交互器(interactor)进行交互,而不是进行标准的文件输入输出。你将通过标准输入输出流与该程序进行交互。

程序启动后,将通过标准输入流读入关于版本的信息。

第一行包含一个整数 $N$——Bit 中版本的数量($1 \le N \le 1000$)。

接下来的 $N$ 行包含版本的描述,每行以一个版本号开头——一个由 6 位十六进制数字(数字 0 到 9 以及小写英文字母 'a' 到 'f')组成的字符串。保证描述中不包含版本号为 000000 的版本。紧接着是一个整数 $k$——当前版本所依赖的版本数量($0 \le k \le 2$),随后是 $k$ 个用空格分隔的依赖版本号。保证在描述一个新版本时,它所依赖的所有版本的描述都已经给出。

现在 Vasya 必须找到他的 bug。保证代码中总共不超过 10,000 个 bug。

寻找 bug 的过程始于从输入流向你的程序发送的一行,其中包含字符串 bug 和发现新 bug 的版本号。如果给出的版本号为 000000,则表示所有 bug 均已找到,程序必须终止。否则,开始寻找该 bug。

接下来,你的程序必须向标准输出流发送查询。每个查询必须单占一行,包含一个命令和要对该版本执行命令的版本号。命令可以是以下之一:

  • check — 检查该版本是否存在 bug。如果该版本受 bug 影响,交互器将返回单行 bad;如果该版本没有 bug,则返回 good
  • fix — 表示你已经找到了产生 bug 的源头版本。在执行 fix 命令后,你的程序必须开始寻找下一个 bug。

对于每个 bug,你的程序最多只能进行 20 次查询,否则将获得 Wrong Answer 评测结果。

请确保在每次输出查询后打印换行符并清空输出缓冲区(使用语言的 flush 命令)。否则,程序可能会因超时(Timeout)而终止。

样例

输入样例 1

9
000001 0
000002 1 000001
000003 1 000002
000004 1 000002
000005 1 000003
000006 1 000001
000007 2 000006 000001
000008 2 000004 000005
000009 2 000007 000008
bug 000008
bad
good
bad
bug 000009
bad
good
bug 000000

输出样例 1

check 000004
check 000001
check 000002
fix 000002
check 000007
check 000006
fix 000007

说明

为了便于阅读,样例中的输入和输出在实际交互中是交替进行的。

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.