电容器因制造公差高而臭名昭著。在许多情况下这是可以接受的,但有时需要具有严格公差的容量。获得具有所需准确值的容量的常见策略是并联使用两个经过仔细测量的电容器,以使它们的容量总计达到所需范围。
在给定(一组)容量的情况下,此挑战的目标是将电容器配对,以使每对电容器的总容量在给定范围内。您还需要找到最佳的配对对,即配对对,以便找到尽可能多的配对。
约束条件
- 输入包括选择的格式
- 容量的无序列表,代表您拥有的(多个)电容器组
- 一对表示的下部和上部的能力结合的的目标范围(包括)
- 输入中的所有容量均为小于2 30的正整数,单位为pF(无关紧要)。
- 除了输入电容列表之外,您拥有的电容器组还包含无限数量的0 pF电容器。
- 输出以选择的格式包括容量对列表,以使每对容量之和在指定的目标范围内。既没有指定线对的顺序,也没有指定线对中的容量顺序。
- 输出中的任何电容出现的频率都不会比您拥有的一组电容器中出现的频率高。换句话说:输出的对不能重叠。
- 满足条件4和5的任何可能输出都不应该包含比程序产生的输出更多的容量对。
- 您的程序应在O(n!)时间终止,其中n是代表您拥有的电容器组的列表的长度
- 不得滥用漏洞
- 该目标范围,不得为空
计分
您的分数是解决方案的长度(以八位字节为单位)。如果您的解决方案设法在多项式时间O(n k)中解决了约k个问题,请将您的得分除以10。我不知道这是否实际上可行。
样品输入
范围100到100,输入数组
100 100 100
,有效输出:0 100 0 100 0 100
范围100到120,输入数组
20 80 100
,有效输出:0 100 20 80
输出
20 100
无效范围90到100,输入数组
50 20 40 90 80 30 60 70 40
,有效输出:0 90 20 80 30 70 40 60 40 50
范围90到90,输入数组
20 30 40 40 50 60 70 80 90
,有效输出:0 90 20 70 30 60 40 50
范围90到110,输入数组
40 60 50
,有效输出:40 60
3
我相当确定这可以在O(n log n)中轻松解决。首先,将范围为0 pF的任何电容器配对。其余排序。保持最低和最高电容器配对,如果高于该范围则丢弃最高电容器,如果低于该范围则丢弃最低电容器。
—
orlp
一些输入/输出测试会很好。
—
orlp
@orlp我已经问过了,OP正在处理它
—
Beta Decay
@orlp的算法有效,但证明需要一段阴影才行。从本质上说,一个最小的反例必须有
—
彼得·泰勒
a <= b <= c <= d
这样a + d, a + c, b + d
都在范围内,但b + c
不大,但给人的矛盾。
@orlp提供的样本输入对您有用吗?
—
FUZxxl 2015年