#HK5430. 「OOI 2017 Day 2」来玩游戏吧?
「OOI 2017 Day 2」来玩游戏吧?
题目描述
题目译自 Open Olympiad in Informatics 2017 Day2 T4 「Поиграем? / Shall We Play a Game?」。
这是一道交互题。
1804 年,美国副总统亚伦·伯尔因一系列针对自己的侮辱性小册子,向纽约州州长候选人亚历山大·汉密尔顿发起决斗挑战。
但伯尔是一个理性的人,他明白即使在决斗中杀死汉密尔顿,他的名誉也会受损,政治生涯将就此终结。因此,双方决定通过玩游戏来解决争端。为了公平起见,他们决定玩 局游戏。
每局游戏中,汉密尔顿会想出一个正整数 ,伯尔则尝试猜测这个数字。对于任意正整数 ,伯尔可以询问汉密尔顿在 到 (包含两端)之间能被 整除的数字占比。换句话说,当询问关于 的信息时,他会得到表达式
的值,并且汉密尔顿会以不可约分分数的形式返回结果(这里 表示对实数 向下取整)。
请帮助伯尔在预定数量的询问内找出答案。
交互方式
程序启动时,输入一个整数 ,表示汉密尔顿与伯尔之间的游戏局数。
对于每局游戏,固定了一个数字 ,表示单局游戏中允许的最大询问次数。保证 次询问足够解决此问题。此数字不会传递给参赛者的程序,但不同子任务中对 的限制在评分规则表格中列出。如果参赛者的程序在单局游戏中进行了超过 次询问,则在该测试用例上将获得 Wrong answer 结果。
要进行询问,应输出字符串 ,其中 是一个正整数,表示需要计算表达式
的值。
对于每次询问,程序将收到两个以空格分隔的数字 和 ,表示该分数简化后的分子和分母;如果程序超过了询问次数限制,则会收到数字 。
如果程序确定了所猜数字,应输出字符串 ,其中 是猜测的答案。如果答案正确,程序将收到字符串 Correct;如果答案错误,将收到字符串 Wrong。
随后,程序将进入下一局游戏(如果还有游戏),否则应结束运行。
注意,如果收到数字 或字符串 Wrong,你必须立即终止程序。否则,测试系统的判定可能不正确,例如可能得到 Run-time error 或 Time limit exceeded 的结果!
保证每个测试用例中,猜想的数字在游戏开始时就已固定,不会因你的询问而改变。
2
1 2
3 10
1 5
1 5
1 10
1 10
0 1
Correct
1 1
0 1
Correct
X 2
X 3
X 5
X 4
X 6
X 10
X 11
N 10
X 1
X 2
N 1
在第一个样例中,。样例展示了玩家如何通过询问猜测出第一局游戏中猜想的数字是 ,第二局是 。测试系统中第一个测试用例也使用了这些数字。
请严格遵守输出格式。每次输出后必须输出一个换行符,并刷新输出缓冲区——在 Pascal 或 Delphi 中使用 flush(output),在 C/C++ 中使用 fflush(stdout) 或 cout.flush(),在 Python 中使用 sys.stdout.flush(),在 Java 中使用 System.out.flush()。
数据范围与提示
详细子任务附加限制及分值如下表所示。其中子任务 是样例。
| 子任务 | 分值 | 附加限制 | 子任务依赖 | 备注 |
|---|---|---|---|---|