loj#P3558. 「BalticOI 2021 Day1」A Difficult Choice
「BalticOI 2021 Day1」A Difficult Choice
题目描述
题目译自 BalticOI 2021 Day1「A Difficult Choice」,译者 cnyz。
有一个长度为 的未知的单调上升整数序列 ,您需要选出这个序列中的 个数,使得他们的和 且 。
您最多可以得知 个 中的元素。
试选出这个序列满足要求的 个数。
实现细节
如果您是 C++ 选手,您需要声明 books.h
。
您需要实现一个函数 void solve(int N,int K,long long A,int S)
,这个函数可以调用如下三个函数(如下均为样例交互库情况):
long long skim(int i)
- 这个函数将返回 的值
- 这个函数至多能被调用 次,否则您的程序会被判为
Out of books to skim.
。 - 您需要保证 ,否则您的程序会被判为
Invalid skim.
。
void answer(vector<int> v)
- 如果有解,返回存储在
vector<int> v
中的解。 - 您需要保证 且 ,否则您的程序会被判为
Invalid answer
。 - 您需要保证 的和 且 ,否则您的程序会被判为
Wrong answer
。 - 如果您上述条件都满足了,您的程序会被判为
Correct: s book(s) skimmed.
,其中 为skim
函数的调用次数。
- 如果有解,返回存储在
void impossible()
:如果无解,返回无解。- 如果您调用了这个函数,您的程序会被判为
Impossible (not checked): s book(s) skimmed.
,,其中 为skim
函数的调用次数,注意这并不意味您的程序是对的。
- 如果您调用了这个函数,您的程序会被判为
评测用的交互库仅会返回 Not Correct
或者 Correct
。
输入格式
样例交互库从标准输入流读入以下数据:
第一行,四个整数 ,,,。 第二行, 个整数 ,注意序列 单调上升。
如果输入不符格式,则直接判为 Invalid input.
。
输出格式
样例交互库向标准输入流输出以下数据:
仅一行表示您的状态。
样例交互
有 ,,,。
首先我们调用 solve(15, 3, 42, 8)
。
那么,样例交互可能会是这样的:
你的调用 | 返回值 | 注释 |
---|---|---|
skim(1) |
。 | |
impossible() |
显然若最小的都是 的话,是无解的。 | |
这是对的。 |
你的调用 | 返回值 | 注释 |
---|---|---|
skim(1) |
。 | |
skim(15) |
,因为这个序列是单调上升的,那么这个序列一定是 。 | |
answer({11, 15, 7}) |
,符合条件。 | |
这是对的。 |
数据范围及限制
对于所有数据,满足 ,,,。
详细子任务分值及附加限制如下:
- 子任务 ( 分):,,。
- 子任务 ( 分):,。
- 子任务 ( 分):,。
- 子任务 ( 分):,。
- 子任务 ( 分):。
- 子任务 ( 分):,。
- 子任务 ( 分):。