您的商店出售几种不同类型的娃娃。每个玩偶都有建议的价格,没有
两种类型的娃娃价格相同。您想要确定实际售价
每个娃娃让不同类型的娃娃尽可能地价格不同。由于
一些政府规定,你只能修改固定的建议价格
±K的带 - 换句话说,如果建议的价格是p,你可以选择任何售价
在{p-K,p-K + 1,...范围内。 。 。 ,p + K -1,p + K}。当然,售价必须
总是非负面的。
例如,假设有四种类型的玩偶,建议价格为130,210,70
和90,你可以在20的范围内修改价格。然后,你可以调整
价格分别为150,210,50和100,使价格的最小差价
在任何两种类型的娃娃之间是50。(对于第二个娃娃,你可以选择任何一个
价格在200到230之间。)你可以检查这是你最大的分离
可以达到约束条件。
在下面的每个案例中,您都会获得一系列价格和K.您的价值 必须确定所有对之间可以达到的最大间隔 如果允许您修改每个价格高达±K,则序列。
(a)K = 13.序列:144,152,214,72,256,3,39,117,238,280。
(b)K = 10.顺序:10,48,57,32,61,74,33,45,99,81,19,24,101。
(c)K = 20.序列:10,19,154,67,83,39,54,110,124,99,139,170
所以基本上,我只需要找到最大分离值而无需编码。我试图设计一种算法,但是失败了,所以我只是通过基本上将每个价格增加/减少某个值来开始强制它,但是由于K的值,这里应用的强制执行过于强硬。任何K <6)都很简单。
有人可以定义函数或递归关系来计算它吗?这些解决方案在线,但它们只给出了整数的答案,并没有解释如何达到解决方案。我是编程的初学者,所以请尝试使用伪代码/一点点C ++来解释。谢谢。
来源:http://www.iarcs.org.in/inoi/2013/zio2013/zio2013-qpaper.pdf 解决方案:http://www.iarcs.org.in/inoi/2013/zio2013/zio2013-solutions.pdf
答案 0 :(得分:0)
这是一个O(nlogn)算法。
为了说明我将使用第二个例子:10,48,57,32,61,74,33,45,99,81,19,24,101,K = 10
对于x的试验值,在满足条件的同时贪婪地分配最终值,使其尽可能小(非负值,在原始值的K值内,至少x大于之前值)。
所以让我们从x = 10开始。 我们将按如下方式移动:
我们得出结论,x = 10的分离度太高,我们需要向下移动。 您可以尝试x = 7并发现它是可能的,x = 9发现它是不可能的,然后尝试x = 8:
因此我们发现x = 8是可能的,x = 9是不可能的,因此x = 8是最大可能的分离。