Codechef Q - 为什么我得到错误的答案"

时间:2014-11-11 18:29:21

标签: python algorithm

很抱歉这个简短的标题,SO不会让我发布任何其他内容。

我已经为问题PHYSICS(http://www.codechef.com/problems/PHYSICS)编写了以下解决方案,它通过了提供的简单测试用例,但是在所有测试用例中提交了WA(错误答案)的结果。

import numbers

T = input()

for t in xrange(T):

N, F = [int(i) for i in raw_input().split()]
heights = [(long(i), False) for i in raw_input().split()]

heights.sort()
heights.reverse()

ways = 0
for i, h in enumerate(heights):
    height = h[0]
    used = h[1]
    if used:
        continue
    j = 0
    while True:
        force = F ** j
        if force > height:
            break
        bounce = height / force
        if isinstance(bounce, numbers.Integral):
            try:
                if len(heights) > i:
                    index = heights.index((bounce, False), i + 1)
                    if index != i:
                        heights[index] = (bounce, True)
                        ways += 1
                        break
            except ValueError:
                pass
            finally:
                j += 1
print ways

这就是我在我的解决方案中所做的事情:

  • 为所有孩子在课堂高度列表中存储元组(高度, used)其中height是孩子的高度和使用的布尔值 表示孩子是否已用于组成一对。
  • while循环检查是否存在高度等于所有可能反弹的孩子

帮助我发现此解决方案可能失败的情况以及修复。

1 个答案:

答案 0 :(得分:0)

我认为你的问题有点不对劲。您可以使用多于一对的孩子,唯一的特殊情况是两个孩子的身高相同。因此,您可以稍微复杂一点。您是否打印了示例案例2的正确答案?您似乎只计算一对4,而事实上它只参与两对。