在洛谷上提交此题,请选择 >=C++17 的语言标准,不需要引入 #include "gcd5.h",而是将
long long query(int x);
void answer(long long a, long long b);
void solve(int n);
放在程序开头。
题目与 GCD 毫无关系 :)
妮基已经想好了 条隐藏的直线(或线性函数),而你需要找出它们。形式化地,第 条直线由一对系数 定义,并表示线性函数 。
妮基不喜欢分数,因此所有系数都是整数。
为了找到这些隐藏的直线,你可以提出关于“在给定整数 处,哪条直线取得最大值”的查询。正如你已了解到的,妮基讨厌小数,所以你只能对整数值 提出这个问题。形式上,对该问题的回答是:。
题目保证有解。除了上述条件外,还保证每条直线在区间 内至少有 个整数值 使其成为最大值;换句话说,对于每条直线 ,存在至少 3 个值 ,使得对所有 ,都有 。此外,没有两条直线具有相同的斜率 。
请编写一个程序,使用尽可能少的查询次数,找出所有隐藏的直线!
交互格式
本题为交互式题目,你只需实现一个类型为以下的 solve 函数:
该函数将被精确调用一次,参数等于直线的数量。你的实现可以使用以下两个辅助函数:
long long query(int x);
void answer(long long a, long long b);
通过调用 query(x),你可以获取在给定 处所有直线中的最大函数值;你在每个测试点能获得的分数取决于你调用该函数的次数。你只能对 范围内的值调用此函数。
answer 函数必须被精确调用 次——每发现一条直线就调用一次。调用顺序无关紧要。
你的代码中不应包含 main 函数,但可以包含其他辅助函数、类、变量等。你的代码必须包含头文件 gcd5.h。
为便于本地测试,我们提供了本地评测器 Lgrader.cpp 以及头文件 gcd5.h 的副本。你需要将你的代码与本地评测器一起编译以进行测试。你可以将它们放在同一文件夹中,并使用以下命令:
g++ -O2 -std=c++17 -Wl,--stack,1073741824 -Wall gcd5.cpp Lgrader.cpp -o gcd5.exe