codechef walk solution

时间:2016-01-09 18:51:34

标签: explain

在解决codechef问题的同时WALK我想出了一种算法来解决问题,使用分而治之的方法,根据我的算法,我们找到数组中的最大值并将我们的数组分成两部分(一个从开始到Max元素和另一半从Max元素的下一个到数组的末尾)之后我们使用Max +(n-1)找到数组的第一部分(竞争Max elemeny的部分)的初始速度其中n是数组中该部分的元素数....我们为数组的每个部分做这个事情,在计算每个部分的初始速度之后,我们检查一部分数组的初始速度是否小于或等于Max + 1,其中Max是正在考虑的部件之前的数组部分的最大元素,如果是这种情况我们什么都不做,我们找出Max + 1和初始速度之间的差异并添加与之前部分的初始速度的差异正在考虑的部分,我们不断重复这个过程,直到不再需要更改为止。 现在这个算法肯定会工作,但它会超过时间限制。当我看到这篇社论时,它有这个问题的一行解决方案。有人可以向我解释这个解决方案我无法理解。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

让初始速度为V. 当它们处于第一个(基于0的索引)商店时,它们的速度仍为V,V> = W1。 当他们穿过它并进入第二个商店时,速度变为V-1。并且我们知道V-1> = W2。 同样地,当它们穿过它并进入第三个商店时,速度变为V-2。我们知道V-2> = W3。 继续这种方式,我们看到这种关系成立: 对于[0,n-1]

中的所有i,V-i> = Wi
while (matcher.find()) {
    ssb.setSpan(CharacterStyle.wrap(span), matcher.start(), matcher.end(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}

因此,对于所有我来说,Vi> = Wi + i。

选择所有Wi + i中最大的V