最近有一场名为CODEMASTER的codechef竞赛(刚刚结束了几分钟,所以我现在可以把这个问题放在论坛上,我相信:P)。 问题是弓箭手和长枪手。
这是问题陈述::
你被敌对的敌军攻击,骑士和骑士 剑士向你冲锋陷阵。作为你单位的指挥官,你有 我们的任务是安排你的精英弓箭手和长枪兵 特殊形成。
弓箭手和长枪兵必须站在两个旗杆之间 直线(没有士兵可以站在旗帜之外)。每个弓箭手 他的身边必须至少有两个长枪手(一个在他的左边,一个在他身边 他的权利)使他与他们两人的距离相等。 (一个 长枪兵可以在两名弓箭手之间分享。)
弓箭手站在给定的固定位置和之间的分离 他们可能不平等。你需要将你的部队定位在给定的位置 使用最少数量的长枪兵形成。
假设长枪手和弓箭手之间的最小距离 长枪手和一面旗帜是1个单位。两者之间的最小距离 弓箭手是2个单位。输入
输入的第一行包含表示数字的整数T. 测试用例。 T测试用例的描述如下。
第二行包含一个表示数字的整数N. 分离
以下N行各包含一个整数x,即 将当前弓箭手与前一个弓箭手分开。
x的第一个值是第一个弓箭手的分离 第一面旗帜。 x的最后一个值是最后一个值之间的间隔 弓箭手和第二个标志输出
对于每个测试用例,输出包含最小数字的单行 需要长枪兵。约束
1 ≤ T ≤ 1000 1 ≤ N ≤ 1000 2 ≤ x ≤ 1000
实施例
输入:
2 3 4 4 2 4 2 2 2 2
输出:
3 4
解释
示例案例1:可能的形成可以是: F --- 1 --- p --- 3 --- A --- 3 --- p --- 1 --- A --- 1 --- p --- 1 --- F < / p>
示例案例2:可能的形成可以是:
F --- 1 --- --- p 1 --- A --- 1 --- --- p 1 --- A --- 1 --- --- p 1-- -A --- 1 --- --- p 1 ---˚F
F =旗帜A =弓箭手p = pikeman --- d --- = pikeman和archer / flag之间的距离
第一直觉是长枪兵的数量与间隙的数量相等,但后来我意识到可能存在这样的情况,我们可能会因为下一个弓箭手的距离而将两个长枪手放在两个弓箭手之间右边的距离可能小于前两个弓箭手之间的距离。 有人可以帮我解释这个问题的算法。
问题链接:: http://www.codechef.com/CDMS2014/problems/CM1401
链接到其中一个已接受的解决方案:: http://www.codechef.com/viewsolution/5166485
请帮我解释一下这个问题。 在此先感谢..;)