QOJ.ac

QOJ

Time Limit: 1 s Memory Limit: 256 MB Total points: 100 Interactive

#12643. 妙探寻凶

Statistics

Dr. Black 被谋杀了。侦探 Jill 必须确定凶手、案发地点和凶器。共有 6 名可能的凶手,编号为 1 到 6。共有 10 个可能的地点,编号为 1 到 10。共有 6 种可能的凶器,编号为 1 到 6。

仅作说明,我们列出了可能的凶手、地点和凶器的名称。解题不需要这些名称。

凶手 地点 凶器
1. Professor Plum 1. Ballroom 1. Lead pipe
2. Miss Scarlet 2. Kitchen 2. Dagger
3. Colonel Mustard 3. Conservatory 3. Candlestick
4. Mrs. White 4. Dining Room 4. Revolver
5. Reverend Green 5. Billiard Room 5. Rope
6. Mrs. Peacock 6. Library 6. Spanner
7. Lounge
8. Hall
9. Study
10. Cellar

Jill 反复尝试猜测凶手、地点和凶器的正确组合。每一次猜测被称为一个“理论”(theory)。她要求助手 Jack 依次确认或反驳每一个理论。当 Jack 确认一个理论时,Jill 的任务就完成了。当 Jack 反驳一个理论时,他会告诉 Jill 凶手、地点或凶器中有一个是错误的。

你需要实现过程 Solve 来扮演 Jill 的角色。评测程序将多次调用 Solve,每次处理一个新的案例。Solve 必须反复调用由评测程序实现的 Theory(M, L, W)。$M$、$L$ 和 $W$ 是表示凶手、地点和凶器特定组合的数字。如果理论正确,Theory(M, L, W) 返回 0。如果理论错误,则返回 1、2 或 3。1 表示凶手错误;2 表示地点错误;3 表示凶器错误。如果多项错误,Jack 会在错误的选项中任意选择一个(不一定是确定性的)。当 Theory(M, L, W) 返回 0 时,Solve 应当返回。

样例

例如,假设 Miss Scarlet 实施了谋杀(凶手 2),地点在温室(地点 3),凶器是左轮手枪(凶器 4)。当过程 Solve 对函数 Theory 进行以下调用时,可能会返回第二列中的结果。

输入格式 1

Theory(1, 1, 1)
Theory(3, 3, 3)
Theory(5, 3, 4)
Theory(2, 3, 4)

输出格式 1

1, 2, 或 3
1, 或 3
1
0

说明

  • Theory(1, 1, 1) 返回 1, 2, 或 3:三者皆错。
  • Theory(3, 3, 3) 返回 1, 或 3:仅地点正确。
  • Theory(5, 3, 4) 返回 1:仅凶手错误。
  • Theory(2, 3, 4) 返回 0:全部正确。

子任务 1 [50 分]

每次测试运行可能会调用 Solve 最多 100 次。每次调用可能对应不同的凶手、地点和凶器组合作为答案。每次调用 Solve 时,它必须在不超过 360 次调用 Theory(M, L, W) 的情况下找到正确的理论。请确保每次调用 Solve 时都初始化所使用的任何变量。

子任务 2 [50 分]

每次测试运行可能会调用 Solve 最多 100 次。每次调用 Solve 时,它必须在不超过 20 次调用 Theory(M, L, W) 的情况下找到正确的理论。请确保每次调用 Solve 时都初始化所使用的任何变量。

实现细节

  • 实现文件夹:/home/ioi2010-contestant/cluedo/
  • 需由选手实现:cluedo.ccluedo.cppcluedo.pas
  • 选手接口:cluedo.hcluedo.pas
  • 评测接口:grader.hgraderlib.pas
  • 样例评测程序:grader.cgrader.cppgrader.pas 以及 graderlib.pas
  • 样例评测程序输入:grader.in.1
    • 说明:输入文件的每一行包含三个数字,分别表示凶手、地点和凶器。
  • 样例评测程序的预期输出:如果 Solve 正确解决了所有案例,输出文件将包含 OK t,其中 $t$ 是任何案例中调用 Theory 的最大次数。
  • 编译并运行(命令行):runc grader.crunc grader.cpprunc grader.pas
  • 编译并运行(gedit 插件):编辑任何实现文件时按 Control-R
  • 提交(命令行):submit grader.csubmit grader.cppsubmit grader.pas
  • 提交(gedit 插件):编辑任何实现或评测文件时按 Control-J

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.