#P13113. [GCJ 2019 #1C] Power Arrangers

    ID: 12936 远端评测题 40000ms 1024MiB 尝试: 0 已通过: 0 难度: 6 上传者: 标签>2019交互题Special JudgeGoogle Code Jam

[GCJ 2019 #1C] Power Arrangers

Description

Go, go, Power Arrangers!每个人都喜欢这支由五名高中生超级英雄组成的团队,他们分别佩戴字母 A、B、C、D 和 E。当他们并肩站立对抗邪恶怪兽时,会以 120 种不同的从左到右的排列方式排列队伍,从而获得各种不同的战术超能力。他们甚至比“忍者神龟”还要受欢迎!

一些评论家认为,这个团队之所以有排列的噱头,只是为了让节目拥有者能够售卖 120 套不同的 5 人手办,每一套都以不同的从左到右顺序固定在底座上,无法重新排列。作为一名狂热的 Power Arrangers 粉丝,你已经收集了其中的 119 套,但你不记得自己缺少哪一套。你的 119 套手办水平排列在书架上,总共有 119×5=595119 \times 5 = 595 个手办,按从左到右的顺序排列。你不记得这些套装的排列顺序,但你知道这些套装的排列是从所有可能的排列中等概率随机选择的,并且每种情况都是独立的。

你不想浪费时间去找出自己缺少哪一套,因此你计划最多查看 F\mathbf{F} 个手办上的字母。例如,你可以选择查看从左数第八个手办上的字母,这就是从左数第二套中的第三个手办。当你查看一个手办时,你只能获得该手办上的字母;这些字母很难看清,而且不同的队员外观非常相似!

在最多检查 F\mathbf{F} 个手办后,你必须判断出缺少的是哪一套,这样你才能完成你的收藏,随时准备对抗任何邪恶威胁!

交互协议

这是一个交互题。

最开始,你的程序应读取一行,包含两个整数 T\mathbf{T}(测试用例数量)和 F\mathbf{F}(每个测试用例允许检查的手办数量)。然后,你需要处理 T\mathbf{T} 个测试用例。

在每个测试用例中,缺失的那套手办会从所有可能的套装中等概率随机选择,剩下套装的排列顺序也会从所有可能的顺序中等概率随机选择。每一次选择都是独立的。

在每个测试用例中,你最多可以与评测器进行 F+1\mathbf{F} + 1 次交互。你可以进行最多 F\mathbf{F} 次如下形式的交互:

  • 你的程序输出一行,包含一个介于 1 到 595 之间的整数,表示你想查看的手办(从左到右编号)。例如,589 表示从右数第二套中的第四个手办。
  • 评测器会回复一行,包含一个大写字母 A、B、C、D 或 E,表示该手办上的字母。如果你发送了无效数据(例如,超出范围的数字或格式错误的行),评测器会回复一行,内容为大写字母 N。

在你完成最多 F\mathbf{F} 次上述交互后,你还必须进行一次如下形式的交互:

  • 你的程序输出一行,包含一个由五个大写字母组成的字符串,表示缺失套装的排列(例如,CADBE)。
  • 评测器会回复一行,内容为一个大写字母:如果你的答案正确,则为 Y,否则为 N(或格式错误时也为 N)。如果你收到 Y,应开始下一个测试用例;如果没有更多测试用例,则停止输入。

如果评测器向你的输入流发送了 N(因为无效数据或答案错误),它将不会再发送任何输出。如果你的程序在收到 N 后继续等待评测器回复,将会超时,导致 Time Limit Exceeded 错误。请注意,你有责任让程序及时退出,以获得 Wrong Answer 判定,而不是 Time Limit Exceeded。如果超出内存限制或程序运行时出错,将会收到相应的判定。

如常规,若超出内存限制或程序运行时出错,将会收到相应的判定。

你可以使用本地测试工具进行测试。要在本地测试,你需要让测试工具与你的代码并行运行;你可以使用我们的 interactive runner。更多信息请阅读该文件中的注释说明。

测试工具的使用说明已包含在工具的注释中。我们鼓励你添加自己的测试用例。请注意,虽然测试工具旨在模拟评测系统,但它不是真实的评测系统,可能会有不同的表现。

限制条件

  • 1T501 \leqslant \mathbf{T} \leqslant 50
  • 缺失的套装和剩余套装的顺序均为等概率独立随机选择。

测试点 1(11 分,可见)

  • F=475\mathbf{F} = 475

测试点 2(21 分,隐藏)

  • F=150\mathbf{F} = 150

Input Format

参见交互协议。

Output Format

参见交互协议。



Hint

本交互对应测试点 1。

  t, f = readline_int_list()   // 读取 t=50, f=475
  printline 10 to stdout       // 查看从左数第二套中的最后一个手办
  flush stdout
  n = readline_string()        // 读取 n=B。哦,队员 B!虽然他没有 A 的领导力,也没有 C 的技术能力,但他用机智的俏皮话娱乐着团队!
  printline 11 to stdout       // 查看从左数第三套中的第一个手办
  flush stdout
  n = readline_string()        // 读取 n=B。注意,B 在第三套的开头,而在第二套的结尾。
  printline 14 to stdout       // 查看从左数第三套中的第四个手办
  flush stdout
  n = readline_string()        // 读取 n=D。沉默寡言的 D,虽然性格内敛,但为了保护朋友和世界而英勇战斗!
  printline ABCDE to stdout    // 我们鲁莽地猜测,尽管还可以再查看 472 个手办。
  flush stdout
  verdict = readline_string()  // 读取 verdict=N(评测器判定我们的答案错误)
  exit                         // 退出,避免出现超时错误

由 ChatGPT 4.1 翻译