题目描述
**这是一道交互题。**
你的朋友在纸上写了一个整数 $m$,并告诉你 $m$ 是一个在 $1$ 到 $n$ $(1 \le n \le 10^9)$ 范围内的整数。他希望你在 $30$ 次以内猜出这个整数是什么。
每次猜测,你可以告诉他一个整数 $x$,他会告诉你 $x$ 与 $m$ 之间的大小关系:
- 如果 $x \lt m$,他会告诉你一个 $-1$;
- 如果 $x \gt m$,他会告诉你一个 $1$;
- 如果 $x = m$,他会告诉你一个 $0$。
输入格式
你需要在你的程序中实例化 `Interactive` 类,并通过调用该类的方法进行交互。提交程序后,系统会自动引用实现该类的头文件。你可以在调试你的程序时简单实现该类的方法,但请务必在提交程序时将其移除。
`Interactive` 类提供了三个公共接口:
- `int init()` -- 初始化函数。请务必在你的程序开头调用该函数,该函数将会返回一个 `int` 值,代指题意中的 $n$。
- `int ask(int x)` -- 询问函数。你可以将你猜测的数值 $x$ 作为参数传入,返回值表示你的朋友所告诉你的数值。你最多调用这个函数 $30$ 次,否则将会获得 `Wrong Answer`。
- `void submit(int x)` -- 提交答案函数。在你确定答案之后,请调用该函数,并传入你的答案。在调用此函数后将会自动结束程序。
样例仅供交互流程参考,并非代指实际输入输出。Special Judge 仅为提示错误信息用。
样例输出 #1
ask 3
ask 5
ask 4
submit 4
提示
本题代码模板如下,请注意代码中的 Interactive 类**不需要**用户进行实现,只需要提交能够调用接口的代码即可:
```cpp
#include <bits/stdc++.h>
using namespace std;
Interactive in;
int main() {
int n = in.init(), answer;
// TODO...
in.submit(answer);
return 0;
}
```
本题的暴力做法代码如下,请注意直接提交并不会获得 AC:
```cpp
#include <bits/stdc++.h>
using namespace std;
Interactive in;
int main() {
int n = in.init();
for(int i = 1; i <= n; i++)
{
int result = in.ask(i);
if(result == 0)
{
in.submit(i);
break;
}
}
return 0;
}
```