D5T1 Soyo 的秘密
暂无测试数据。
这是一道交互题。
题目背景
Soyo 是一个温柔成熟的女孩子。
她总是喜欢能成为被依赖的人,被信任的人,但她却从未明白如何走进其他人的心。
或许 Soyo 一直都没有发现,在一段关系……或者说感情之中,人的了解是双向的。也许是她不愿将自己的过往坦诚地讲述出来,她总是在逃避,总是在逃避,以至于最后自己的努力终究对抗不过任何风吹雨打。
但这一切逃不过 Anon 的眼睛。她知道,Soyo 也是一个需要被爱的女孩子。怎么样才能走进她的心呢?Anon 知道自己的社交能力可以帮自己从不经意的角落中旁敲侧击出一些信息,尽管如何整合它们已经远远超出了少女的能力。
固执的 Anon 会一直问,直到她能拼凑出完整的故事,然后当面把这一切说出来。
题目描述
如果你不喜欢阅读故事,这里有一份形式化题面。
Soyo 有一个隐藏的整数 \(x\)。
Anon 每次可以向 Soyo 询问一个非负整数 \(y \le C\),Soyo 会回答 \(x + y\) 的正因数个数。\(x\) 是 Soyo 事先选定的,不会随着你的询问而变化。
Anon 知道 \(x\) 是在 \([1,N]\) 中的整数,需要在若干次询问后求出 \(x\) 的精确值。更准确地说,她需要在 \(Q\) 次询问内求出 \(T\) 个 \(x\) 的值。
你需要帮助 Anon 完成这个任务。
交互格式
你需要实现主函数,并引用 divisors.h
。你可以调用以下六个函数:
int GetT()
long long GetN()
int GetQ()
long long GetC()
每次调用会给出对应参数的值,保证每组数据中这四个值固定。
long long Ask(long long y)
向 Soyo 询问 \(x+y\) 的正因数个数。你只能调用这个函数不超过 \(Q\) 次。
void Answer(long long x)
向 Soyo 报告自己求出了当前 \(x\) 的值。如果这是最后一个 \(x\),你应该立刻退出程序,否则你应该继续求解下一个 \(x\)。
下发文件的 ex_divisors.zip
中有样例和 divisors.h
的参考实现,你也可以在下发文件的 divisors.cpp
上修改来完成你的答案。
样例组
样例 \(1\) 输入
2 1000000 10000 1000000000000000
1000
1
样例 \(2\)
见下发文件的 divisors2.in
。该样例满足测试点 \(1 \sim 3\) 的约束。
样例 \(3\)
见下发文件的 divisors3.in
。该样例满足测试点 \(7 \sim 12\) 的约束。
提示
【样例解释】
以下是第一组样例的一次可能的交互过程:
选手程序 | 交互库 | 解释 |
---|---|---|
调用 GetT() |
返回 \(2\) | \(T = 2\) |
调用 GetQ() |
返回 \(10^4\) | \(Q = 10^4\) |
调用 Ask(1) |
返回 \(8\) | \(1001 = 7 \times 11 \times 13\) |
调用 Ask(3) |
返回 \(4\) | \(1003 = 17 \times 59\) |
调用 Answer(1000) |
开始下一组数据 | |
调用 GetT() |
返回 \(2\) | 这个值不会变化 |
调用 Ask(0) |
返回 \(1\) | \(1 = 1\) |
调用 Ask(99) |
返回 \(9\) | \(100 = 2^2 \times 5^2\) |
调用 Answer(1) |
输出 Accepted |
所有答案均正确 |
【数据范围】
本题共 \(25\) 个测试点,所有测试点等分。
测试点编号 | \(T = \) | \(N = \) | \(Q = \) | \(C = \) |
---|---|---|---|---|
\(1 \sim 3\) | \(50\) | \(10^5\) | \(5 \times 10^4\) | \(10^{12}\) |
\(4 \sim 6\) | \(50\) | \(10^6\) | \(5 \times 10^3\) | \(10^{12}\) |
\(7 \sim 12\) | \(50\) | \(10^9\) | \(5 \times 10^4\) | \(10^{12}\) |
\(13 \sim 16\) | \(50\) | \(10^9\) | \(5 \times 10^3\) | \(10^{12}\) |
\(17 \sim 18\) | \(50\) | \(10^9\) | \(2 \times 10^3\) | \(10^{12}\) |
\(19 \sim 20\) | \(10\) | \(10^9\) | \(1300\) | \(10^{12}\) |
\(21 \sim 22\) | \(10\) | \(10^{14}\) | \(950\) | \(10^{17}\) |
\(23\) | \(10\) | \(10^{14}\) | \(820\) | \(10^{17}\) |
\(24\) | \(10\) | \(10^{14}\) | \(750\) | \(10^{17}\) |
\(25\) | \(10\) | \(10^{14}\) | \(720\) | \(10^{17}\) |
请注意下发 grader
和实际评测的 grader
不同,保证 grader
对于任意合法调用的运行时间不会超过 \(0.2\) 秒,使用空间不会超过 \(128 \text{MB}\)。
对于 \(100\%\) 的数据,\(10 \leq T \leq 50\),\(1 \leq N \leq 10^{14}\),\(72 \cdot T \leq Q\),\(1 \leq C \leq 10^{17}\)。
输入格式
以下部分为 grader
的输入格式,**你不应该在程序中读入任何内容**。违反该要求的程序会被记为 \(0\) 分。
第一行输入四个整数 \(T\)、\(N\)、\(Q\)、\(C\)。
接下来 \(T\) 行,每行输入一个整数 \(x\)。
输出格式
以下部分为 grader
的输出格式,**你不应该在程序中输出任何内容**。违反该要求的程序会被记为 \(0\) 分。
如果你的程序成功在限制内回答所有问题,输出 Accepted
。
否则会输出错误的原因,见 grader
的源代码。
信息
- ID
- 1013
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者