[IOI2016] molecules

题目描述

彼得在一家公司工作,这家公司已经制造了一台检测分子的机器。每个分子的重量都是正整数。这台机器的检测范围是 $[l,u]$,这里 $l$ 和 $u$ 都是正整数。这台机器能够检测一个分子集合当且仅当这个集合包含了一个子集,这个子集的分子的重量属于机器的检测范围。 考虑 $n$ 个分子,重量记为 $w_0,\cdots,w_{n-1}$。如果存在一个下标的集合(并且该集合中的下标都不相同)$I=\{i_1,\cdots,i_m\}$ 使得 $l\le w_{i_1}+\cdots+w_{i_m}\le u$,那么检测就会成功。 由于机器的细节,$l$ 和 $u$ 之间的差距要保证会大于等于最重分子和最轻分子之间的差距,即 $u-l \ge w_{max}-w_{min}$,其中 $w_{max}=\max(w_0,\cdots,w_{n-1})$,$w_{min}=\min(w_0,\cdots,w_{n-1})$ 你的任务是写一个程序,该程序能找到一个子集,使得该子集的总重量属于检测范围,或者判定没有这样的子集存在。 ### 样例一 ``` 4 15 17 6 8 8 7 ``` 这个例子当中,我们有四个分子,重量分别是 $6,8,8$ 和 $7$。这台机器可以检测子集总重量在 $15$ 到 $17$ 之间(包含 $15$ 和 $17$)的子集。注意,$17-15 \ge 8-6$。分子 $1$ 和分子 $3$ 的重量之和为 $w_1+w_3=8+7=15$, 所以应该输出 ``` 2 1 3 ``` 其他可能正确的答案有 ``` 2 1 2 ``` ($w_1+w_2=8+8=16$) 和 ``` 2 2 3 ``` ($w_2+w_3=8+7=15$)。 ### 样例二 ``` 4 14 15 5 5 6 6 ``` 这个例子当中,我们有四个分子,重量分别为 $5,5,6$ 和 $6$,我们要寻找一个子集,其总重量介于 $14$ 和 $15$ 之间(包含 $14$ 和 $15$)。请注意,$15-14 \ge 6-5$。因为不存在总重量介于 $14$ 和 $15$ 之间的子集,所以输出 `0`。

输入输出格式

输入格式


- 第一行:整数 $n,l$ 和 $u$。 - 第二行:$n$ 个整数:$w_0,\cdots,w_{n-1}$。

输出格式


如果有满足条件的子集: - 第一行,输出该子集大小 $x$。 - 第二行,$x$ 个整数,符合要求的子集中的分子的下标。 如果没有,输出 `0`。

输入输出样例

输入样例 #1

1 10 12
9

输出样例 #1

0

输入样例 #2

2 5 10
4 2

输出样例 #2

2
0 1

说明

对于 $100\%$ 的数据,$n \le 2 \times 10^5$,$w_i \le 2^{31}-1$,$l,u \le 2^{31}-1$。