#L3558. 「BalticOI 2021 Day1」A Difficult Choice

「BalticOI 2021 Day1」A Difficult Choice

题目描述

题目译自 BalticOI 20212021 Day11「A Difficult Choice」,译者 cnyz。

有一个长度为 NN 的未知的单调上升整数序列 xx,您需要选出这个序列中的 KK 个数,使得他们的和 A\ge A2×A\le 2\times A

您最多可以得知 SSxx 中的元素。

试选出这个序列满足要求的 KK 个数。

实现细节

如果您是 C++ 选手,您需要声明 books.h。

您需要实现一个函数 void solve(int N,int K,long long A,int S),这个函数可以调用如下三个函数(如下均为样例交互库情况):

  1. long long skim(int i)

这个函数将返回 xix_i 的值

这个函数至多能被调用 SS 次,否则您的程序会被判为 Out of books to skim.

您需要保证 1iN1\le i\le N,否则您的程序会被判为 Invalid skim.

  1. void answer(vector v)

如果有解,返回存储在 vector v 中的解

您需要保证 1viN1\le v_i\le Nij,vivj\forall i\not=j,v_i\not=v_j,否则您的程序会被判为 Invalid answer

您需要保证 xvix_{v_i} 的和 A\ge A2×A\le 2\times A,否则您的程序会被判为 Wrong answer

如果您上述条件都满足了,您的程序会被判为 Correct: s book(s) skimmed.,其中 ss 为 skim 函数的调用次数

  1. void impossible()

如果无解,返回无解

如果您调用了这个函数,您的程序会被判为 Impossible (not checked): s book(s) skimmed.,其中 ss 为 skim 函数的调用次数,注意这并不意味您的程序是对的

评测用的交互库仅会返回 Not Correct 或者 Correct。

输入格式

样例交互库从标准输入流读入以下数据:

第一行,四个整数 NNKKAASS

第二行,NN 个整数 xix_i,注意序列 xx 单调上升。

如果输入不符格式,则直接判为 Invalid input.。

样例交互

N=15N=15K=3K=3A=42A=42S=8S=8

首先我们调用 solve(15, 3, 42, 8)。

那么,样例交互可能会是这样的:

数据规模与约定

对于所有数据,满足 KNK\le N3N,s1053\le N,s\le 10^51A,xi10171\le A,x_i\le 10^{17}3K103\le K\le 10