#P6043. 「BalticOI 2021 Day1」A Difficult Choice
「BalticOI 2021 Day1」A Difficult Choice
A Difficult Choice
题目描述
有 本书,编号为 到 。第 本书有一个难度值 。这些难度值对你的程序最初是隐藏的,但满足严格递增:
你需要恰好选择 本书,使它们的难度和不小于 ,且不超过 。也就是说,需要找到互不相同的下标 ,满足:
你最多只能查询 本书的难度。若不存在满足条件的选择,你需要报告无解。
本题在 Hydro OJ 中配置为交互/库题。选手程序不直接读入或输出数据,只需要实现指定函数。
实现要求
C++ 选手需要在程序开头包含头文件:
#include "books.h"
你需要实现如下函数:
void solve(int N, int K, long long A, int S);
评测器会对每个测试点调用一次 solve(N, K, A, S)。
在 solve 中,你可以调用以下三个函数。
long long skim(int i)
查询第 本书的难度 ,其中必须满足:
该函数返回 。
调用 skim 的总次数不能超过 ,否则该测试点判为错误。
void answer(std::vector<int> v)
提交一组答案。v 中应当包含恰好 个互不相同的下标,且这些书的难度和满足:
调用该函数后,程序会立即结束。
void impossible()
报告不存在满足条件的选择。
调用该函数后,程序会立即结束。
如果存在合法方案,你必须调用 answer;如果不存在合法方案,你必须调用 impossible。
选手程序不要实现 main 函数,也不要向标准输出写入任何额外内容。
样例交互说明
设 ,,,。
评测器会调用:
solve(15, 3, 42, 8);
一种可能情况是,若调用:
skim(1)
返回 ,则最小的书难度已经很大,显然不可能选出 本书使总难度不超过 ,因此可以调用:
impossible();
另一种可能情况是:
| 调用 | 返回值 | 说明 |
|---|---|---|
skim(1) |
第 本书难度为 。 | |
skim(15) |
第 本书难度为 。 | |
answer({11, 15, 7}) |
若对应难度为 ,总和为 ,满足 。 |
输入文件说明
本题在 Hydro OJ 中由交互器读取测试数据。每个 .in 文件的格式为评测器内部格式,选手程序不需要直接读取。
数据范围
对于所有测试点:
子任务限制如下:
| 子任务 | 分值 | 限制 |
|---|---|---|
| 1 | 5 | ,, |
| 2 | 15 | , |
| 3 | 10 | ,且对所有 , |
| 4 | 15 | ,且对所有 , |
| 5 | ||
| 6 | 20 | ,且对所有 , |
| 7 |
提交格式示例
#include <bits/stdc++.h>
#include "books.h"
using namespace std;
void solve(int N, int K, long long A, int S) {
// 在这里实现算法
}