题目描述
彼得在一家公司工作,这家公司已经制造了一台检测分子的机器。每个分子的重量都是正整数。这台机器的检测范围是 [l,u],这里 l 和 u 都是正整数。这台机器能够检测一个分子集合当且仅当这个集合包含了一个子集,这个子集的分子的重量属于机器的检测范围。
考虑 n 个分子,重量记为 w0,⋯,wn−1。如果存在一个下标的集合(并且该集合中的下标都不相同)I={i1,⋯,im} 使得 l≤wi1+⋯+wim≤u,那么检测就会成功。
由于机器的细节,l 和 u 之间的差距要保证会大于等于最重分子和最轻分子之间的差距,即 u−l≥wmax−wmin,其中 wmax=max(w0,⋯,wn−1),wmin=min(w0,⋯,wn−1)
你的任务是写一个程序,该程序能找到一个子集,使得该子集的总重量属于检测范围,或者判定没有这样的子集存在。
样例一
这个例子当中,我们有四个分子,重量分别是 6,8,8 和 7。这台机器可以检测子集总重量在 15 到 17 之间(包含 15 和 17)的子集。注意,17−15≥8−6。分子 1 和分子 3 的重量之和为 w1+w3=8+7=15, 所以应该输出
其他可能正确的答案有
(w1+w2=8+8=16)
和
(w2+w3=8+7=15)。
样例二
这个例子当中,我们有四个分子,重量分别为 5,5,6 和 6,我们要寻找一个子集,其总重量介于 14 和 15 之间(包含 14 和 15)。请注意,15−14≥6−5。因为不存在总重量介于 14 和 15 之间的子集,所以输出 0
。
输入格式
-
第一行:整数 n,l 和 u。
-
第二行:n 个整数:w0,⋯,wn−1。
输出格式
如果有满足条件的子集:
如果没有,输出 0
。
提示
对于 100% 的数据,n≤2×105,wi≤231−1,l,u≤231−1。