[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$。