#P8122. [BalticOI 2021] A Difficulty Choice (Day1)
[BalticOI 2021] A Difficulty Choice (Day1)
题目背景
本题为交互题。
感谢交互库与 checker 的提供者 Hi_chocolate 为本题做出的巨大贡献。
特别提示
在洛谷提交本题时的一些注意事项(与原题面不同之处请以此处为准):
- 提交时请在程序里加入以下函数声明语句:
extern "C" long long skim (int i);
extern "C" void answer (std::vector<int> v);
extern "C" void impossible ();
你实现的 solve 函数应为:
extern "C" void solve (int N, int K, long long A, int S);
- 程序开头不用,也不应该包含
books.h头文件。 - 仅支持
C++(含C++,C++11,C++14,C++17)提交。
题目描述
您致力于 AK BalticOI,而 AK BalticOI 的方式就是学习。您走进了一家书店,架子上有 本书,编号为 到 ,第 本的难度为 。您要从这 本书中挑选出 本书用来学习,您不希望学到太简单或太难的东西,所以您想要保证这 本书的难度之和位于 的区间内。
可惜的是,您并不知道 的具体数值,所以您要浏览这些书籍以得知他们的难度。书店老板有洁癖,他不希望您浏览太多的书籍,所以他规定您最多只能浏览 本书,然后确定这些书的难度。幸运的是,您被告知这 本书按照编号的增加,难度呈单调递增。
请编写一个程序,通过浏览书籍,购买您需要的书籍,或者指出无解。
交互格式
本题为交互题,您需要编写 void solve (int N, int K, long long A, int S) 函数, 在上面已经定义,并且保证 ,该函数只被调用一次。
您还可以调用如下的函数:
long long skim (int i)浏览第 本书以获取他的难度 。void answer (vector<int> v)买您所需要的书。其中 ,并且需要满足:
void impossible ()指出不可能按照要求买下 本书。
如果存在满足要求的 本书,您必须准确地调用 answer 函数一次;否则您需要准确地调用 impossible 函数一次。调用过后,程序会自动停止。
如果您的函数调用不符合上面的格式,或者调用了超过 次 skim 函数,程序会自动停止,这个测试点会判为 Not correct;你不能在标准输出中输出任何东西,否则会被判为 Security violation。
如果您使用 C++ 编码,请调用 books.h 头文件,如果您想检验您的程序的正确性,可以在下方附件中下载 sample_grader.cpp 与 books_sample.cpp,分别为您提供检验正确性和示例说明的作用。
如果您使用 Python 编码,可以在下方附件中下载 books_sample.py 检验。
交互库希望标准输入里有两行:
- 第一行四个整数,。
- 第二行 个整数,。
随后,交互库会调用您的程序,最后,交互库会在标准输出中返回信息:
| 信息 | 意义 |
|---|---|
| Invalid input. | 标准输入的格式错误 |
| Invalid skim. | skim 函数调用无效 |
| Out of books to skim. | skim 函数调用超过 次 |
| Invalid answer. | answer 函数调用无效 |
| Wrong answer. | answer 函数调用的 不满足要求 |
| No answer. | solve 函数没有调用 answer 函数和 impossible 函数中的任意一个 |
| Impossible (not checked): s book(s) skimmed. | 上述事件都没有发生,调用了 次 skim 函数,并在有答案的时候调用了 impossible 函数 |
| Correct: s book(s) skimmed. | 上述事件都没有发生,调用了 次 skim 函数 |
针对上面若干个错误的情况,交互库仅会返回 Not correct,或者正确的时候返回 Correct。每当出现上面的若干个错误,或者您的程序调用了 answer 或 impossible 函数时,程序会被自动停止。
输入格式
见「交互格式」。
输出格式
见「交互格式」。
15 3 42 8
提示
样例 1 解释
,,,,下面是可能的两种会被判为通过的调用结果:
示例 1:
| 你的程序 | 返回值 |
|---|---|
skim(1) |
|
impossible |
- |
示例 2:
| 你的程序 | 返回值 |
|---|---|
skim(1) |
|
skim(15) |
|
answer({11,15,7}) |
- |
数据规模与约定
本题采用捆绑测试。
- Subtask 1(5 pts):,,。
- Subtask 2(15 pts):,。
- Subtask 3(10 pts):,。
- Subtask 4(15 pts):,。
- Subtask 5(15 pts):。
- Subtask 6(20 pts):,。
- Subtask 7(20 pts):。
对于 的数据,,,,。