#XMOJ11359. 寻宝

寻宝

说明

时间限制:1 Sec 内存限制:256 MB 输入文件treasure.in 输出文件treasure.out

宝藏被埋在二维坐标 $(AX, AY)$ 处,但你不知道该坐标的具体数值。你只知道 $AX$、$AY$ 均为整数,并且满足 $0 \le AX,AY \le 100000$。

你可以通过查询坐标的方式获取该坐标到宝藏位置的曼哈顿距离,要求在 $C$ 次以内的查询中确定宝藏的准确位置。


曼哈顿距离定义:

两点 $(X,Y)$ 和 $(AX,AY)$ 之间的曼哈顿距离计算公式为:$d = |X - AX| + |Y - AY|$。

输入格式

你需要引用头文件 treasure.h。

你需要实现下面的函数

void treasure(int c, int &ax, int &ay);

其中,$c$ 表示最多允许查询的次数,$ax$ 和 $ay$ 用来传递宝藏所在的坐标 $(AX,AY)$,即 $AX=ax,AY=ay$。

这个函数在一个测试点内会被调用一次。

你可以调用以下函数:

int query(int x,int y);

这个函数对应题目描述中的查询,这个函数只能被调用不超过 $100$ 次。你需要保证 $x,y$ 是绝对值不超过 $10^9$ 的整数。

这个函数会返回 $(x,y)$ 到宝藏位置的曼哈顿距离。

你可以查看下发文件中的 grader.cpp,其实现与评测时的交互库几乎一致。

输出格式

下发 treasure.cpp 是参考实现,实际提交的代码与它类似,不需要写 freopen 语句。

你可以在本题目录下使用以下指令来编译你的代码:

g++ grader.cpp treasure.cpp -o treasure -O2 -std=c++14 -static

注意,grader.cpp treasure.h treasure.cpp 需要在同一个目录。

如果是 Windows 系统下的 DevC++,可以把这几个程序合并到一个程序进行编译,但是提交的时候必须像下发文件中的 treasure.cpp 一样,只保留必要的部分。

对编译出来的程序,输入格式是:

第一行 $3$ 个整数 $AX$,$AY$ 和 $C$。

程序会输出得分信息,具体地:

- 如果你的输入不合法、或者调用时违反了某些限制会获得 Wrong Answer. 的返回信息,此时程序会立即停止,具体错误见下发 grader。

- 否则,交互库会输出 AC with x query(s). 表示你返回了正确的答案,且调用查询数量为 $x$。

样例

样例说明 #1

下发文件中包含了一个 treasure.cpp 的实现,可以通过样例 1,不能通过样例 2。

下载文件

点击这里下载下发文件

数据范围

对于 10% 的数据,$AX,AY \lt 10$,$C=100$。

对于 80% 的数据,$AX,AY \le 10^5$,$C=100$。

对于 100% 的数据,$0 \le AX,AY \le 10^9$,$C=20$。