“只要你心里的念是真的,只要你心里的念是诚的,高山大海都会给你让路。”——《平原上的摩西》
这是一道交互题。
在二维平面上有一条未知的、不与
给定值域
- 对于任意整数
, ; 。
此时
你可以向交互库询问至多
你需要找到直线
实现细节
请确保你的程序开头有 #include "plain.h"
。
你不需要也不应该实现主函数。你需要实现以下函数:
std::tuple<long long, int, long long, int> Find(int task_id, int V, int limit);
- 其中
task_id
表示子任务编号,V
表示值域,limit
表示最大询问次数。 - 你需要返回四元组
表示你给出的直线 的解析式为 。 - 你需要保证
与 在long long
范围内, 与 在int
范围内,且 。你不需要保证给出的分数是既约分数。可以证明在本题的数据范围下,总是存在这样的 满足条件。 - 在最终测试时,交互库将会调用
次Find
函数。
- 其中
你可以使用 std::make_tuple(a,b,c,d)
来将
你可以调用如下函数进行一次询问:
bool query(int x,int y)
;- 你需要保证
,在单组测试数据内该函数的调用次数不超过 。 - 当
时,函数返回true
,否则返回false
。
- 你需要保证
保证在满足题目条件和数据范围的情况下,最终测试时交互库的运行时间不会超过
交互库不是自适应的,即
测试程序方式
试题目录下的 grader.cpp
是我们提供的交互库参考实现。最终测试的交互库与样例交互库有一定不同,故你的实现不应该依赖样例交互库实现。
你需要在本题目录下使用如下命令编译得到可执行程序:
g++ plain.cpp grader.cpp ‐o plain ‐O2 ‐‐std=c++14 ‐lm
对于编译得到的可执行程序:
- 可执行文件将从标准输入读入以下格式的数据:
- 第一行三个整数
,分别表示子任务编号,测试数据组数和每组测试数据的询问次数上限。接下来依次输入每组测试数据。 - 对于每组测试数据输入一行五个整数
,其中 V 表示值域, 表示直线 L 的解析式为 。 - 你需要保证
在 long long 范围内, 在 int 范围内,且 。
- 第一行三个整数
对于所有测试数据,保证存在这样的
- 读入完成之后,交互库将会调用
次Find
函数。 - 若每一组测试数据中你都在给定的询问次数内求出了正确的直线,交互库将在标准输出流输出两行,第一行一个字符串
,第二行一个整数,表示 组测试数据中query
调用次数的最大值。否则交互库会输出对应错误信息,并立即停止程序。
样例 #1
样例输入 #1
0 3 20 4 5 11 11 6 4 ‐11 15 17 5 4 2 15 4 5
样例输出 #1
Correct. 8
【样例 解释】
下面三张图依次展示了三组数据对应的函数图像。
子任务
对于所有测试数据,
子任务编号 | 分值 | 特殊性质 | |||
---|---|---|---|---|---|
1 | 无 | ||||
2 | A | ||||
3 | 无 | ||||
4 | 无 | ||||
5 | 无 | ||||
6 | 无 | ||||
7 | 无 |
特殊性质 A:保证直线
评分方式
本题首先会受到和传统题相同的限制。例如编译错误会导致整道题目得
当你在每次 Find
调用中,程序调用的 query
函数次数不超过 limit
,且返回的
选手不应通过非法方式获取交互库的内部信息,如试图与标准输入、输出流进行交互。此类行为将被视为作弊。