#D0967. 猜数游戏
猜数游戏
题目描述
33DAI 和 Tom 玩一个猜数游戏。Tom 心里想好了一个整数 ,满足 ,但 33DAI 不知道 是多少。
33DAI 可以向 Tom 提问。每次提问他给出一个整数 ,Tom 回答 是否严格大于 。33DAI 也可以在任意时刻直接猜出 。
33DAI 一共最多只能进行 次操作(一次提问或一次猜测都算一次操作)。请你帮他赢得游戏。
交互规则
本题没有输入文件,你通过与交互器对话来获取信息。你的程序需要从标准输入读入数据、向标准输出写数据。
第一步:从标准输入读入一个整数 (),表示 的取值范围。
接下来的每一次操作,你向标准输出写一行,格式必须是下面两种之一:
1 y:提问。其中 必须是满足 的整数。交互器会回答一行:yes:表示 ;no:表示 。
2 y:猜数。其中 必须是满足 的整数。如果 ,交互器会输出一行win,本题该测试点通过;如果 ,本题该测试点判为 Wrong Answer。
每次输出一行后,必须立即刷新输出缓冲区,否则交互器会读到旧数据而判错。C++ 中的做法是:
printf("1 %d\n", y);
fflush(stdout);
// 用 cout 的话写 cout << "1 " << y << endl;(endl 会刷新)或 cout.flush();
限制:提问与猜测的总次数不能超过 次,否则判为 Wrong Answer。
样例
下面是一次合法的交互过程(,隐藏的数是 )。空行只是为了排版,实际输出中不要有空行。
交互器 你的程序
10
1 5
yes
1 8
no
1 6
yes
2 7
win
样例解释
- 交互器给出 ;
- 你问
1 5,交互器回答yes,说明 ; - 你问
1 8,交互器回答no,说明 ; - 你问
1 6,交互器回答yes,说明 ; - 你猜
2 7,正好等于 ,交互器回答win,本测试点通过。
数据范围
对于所有测试数据,保证:
- ;
- 。
子任务
本题共 20 个测试点,按测试点计分:
| 测试点 | 分值 | 每个测试点 | 特殊限制 |
|---|---|---|---|
每个测试点单独评分,全部测试点的得分之和即为本题得分。