#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$。
相关
在下列比赛中: