luogu#P7805. [JOI Open 2021] Monster Game
[JOI Open 2021] Monster Game
题目背景
本题为交互题。
交互库与 spj 提供者
https://www.luogu.com.cn/user/705620
请不要在代码中加入头文件 monster.h
,在 Solve 函数前加上 extern "C"
,开头加上 extern "C" bool Query(int,int);
即可。
警告:滥用本题评测将被封号!
题目描述
你圈养了 只书虫,这 只书虫编号为 ,第 只书虫的力量值为 ,满足 ,且没有两只书虫的力量值是相等的。
你可以调用最多 次「打架事件」:
- 选择两只编号不相同的书虫 :
- 如果 ,则力量值小的书虫获胜;
- 如果 ,则力量值大的书虫获胜。
请最小化调用「打架事件」的次数,你可以得到每次「打架事件」的结果,求所有书虫的力量值。
交互格式
你的程序需要实现以下函数:
std::vector<int> Solve(int N)
- 对于每组数据,该函数只能被调用一次;
- :书虫的个数;
- 该函数返回这 只书虫的力量值数组 ;
- 应该满足 ,否则您的程序将会被判为
Wrong Answer [1]
; - 应该满足 ,否则您的程序将会被判为
Wrong Answer [2]
; - 应该满足 ,否则您的程序将会被判为
Wrong Answer [3]
。
你的程序可以调用以下函数:
bool Query(int a, int b)
- 你可以用这个函数调用「打架事件」;
- :书虫 与书虫 打架;
- 如果 获胜了,则返回
true
否则返回false
; - 应该满足 ,否则您的程序将会被判为
Wrong Answer [4]
; - 应该满足 ,否则您的程序将会被判为
Wrong Answer [5]
; - 调用
Query
函数应该不超过 次。否则您的程序将会被判为Wrong Answer [6]
。
特殊说明
- 您的程序可以调用其他标准库里的函数,或者使用全局变量;
- 您的程序不得使用标准输入与标准输出。
输入格式
见「交互格式」。
输出格式
见「交互格式」。
5
3 1 4 2 0
提示
样例 1 解释
样例的交互过程:
调用 | 返回 | 调用 | 返回 |
---|---|---|---|
Solve(5) |
|||
Query(1, 0) |
false |
||
Query(4, 0) |
|||
Query(1, 3) |
true |
||
[3, 1, 4, 2, 0] |
评测程序示例(样例)
评测程序示例以如下格式读取输⼊数据:
第一行:
第二行:
评测程序示例以如下格式读取输出数据:
当程序成功结束运行后,样例交互器会在标准输出中输出以下内容:
- 如果你的程序被判为正确,样例交互器会输出类似
Accepted: 100
的信息,其中 为你的程序调用Query
函数的次数; - 如果你的程序被判为错误,样例交互器的输出内容已在「交互格式」中描述。
如果你的程序有多数错误,样例交互器只会判断其中的一种。
注意,交互器在某些数据中是自适应性的,也就是实际的交互器刚开始并没有一个确定的答案,而是会随着之前 Query
函数的调用逐渐做出响应,能保证至少有一组答案满足交互库做出的响应。
(本来原题有一个工具可以用来检测,但是找不到检测文件了,所以就咕掉了)
数据规模与约定
本题采用捆绑测试。
- Subtask 1(10 pts):;
- Subtask 2(15 pts):实际使用的交互库并不是自适应性的;
- Subtask 3(75 pts):无特殊限制。
对于 的数据:
- ;
- ;
- 保证互不相同。
对于 Subtask 3,特有一套评分标准:
如果你的程序通过了所有测试数据,那:
- 设 为 Subtask 3 中你的程序对每个测试点调用的
Query
函数的次数的最大值; - 你的分数将按照下面的过程计算:
- 如果 ,你将得到 $\left\lfloor75 \times \dfrac{2.5 \times 10^4-X}{1.5 \times 10^4}\right\rfloor$ 分;
- 如果 ,你将得到 分。