【问题标题】:Countdown problem in Kickstart Round C 2020Kickstart Round C 2020 中的倒计时问题
【发布时间】:2020-10-31 16:43:32
【问题描述】:

我使用以下方法尝试了here 提到的 Google Kickstart Round C 倒计时问题:

  • 将输入数组转换为空格分隔的字符串
  • 将序列m m-1 m-2 …1 派生为另一个以空格分隔的字符串。
  • 只需计算第一个字符串中第二个字符串的实例数,因为无论如何序列都应该不重叠,所以这种方法应该有效。

但是,我在实践中得到了WA (Wrong Answer), test set skipped

这是我在python-3 中的代码。

t = int(input())

for i in range(t):
    case_num = i + 1
    n, k = [int(x) for x in input().split(" ")]
    # The blank spaces around the input str a and substr_k should deal with cases like [3,2,13]
    a = " " + " ".join([str(int(x)) for x in input().split(" ")]) + " "
    substr_k = " " + " ".join(str(i) for i in reversed(range(1, k+1))) + " "
    print("Case #{}: {}".format(case_num, a.count(substr_k)))

请注意,我理解分析中提到的方法显然是一种更好的方法,并且我已经理解它,但是,我仍在试图找出我在上面懒惰编写的代码中哪里出错了。由于我无法访问Google 用于对此代码进行评分的实际案例,您能帮我解决这个问题吗?只是一个返回错误输出的简单案例就可以知道我哪里出错了。

编辑:考虑到@liju 的建议,我更改了代码中的第 6 行,以更好地适应以 0 为前缀的数字的情况

【问题讨论】:

  • 当测试用例中以02,03 等零为前缀的数字而不是2,3 时,此方法将失败。
  • @Liju 正如您所指出的,我尝试将代码中的第 6 行更改为 a = " " + " ".join([str(int(x)) for x in input().split(" ")]) + " "。不幸的是,结果保持不变

标签: python algorithm


【解决方案1】:

举一个例子

字符串 = "abcbabcba"

String.count("abcba")

这将返回 1。

但是“abcba”的数量是2。

你的代码有同样的问题:

输入:

1

6 3

3 2 1 3 2 1

输出:

1

预期输出:

2

说明:

代码正在使用 count 函数查找返回值为 1 的“3 2 1”的计数。

【讨论】:

  • 你的建议绝对是点队友。我以为我已经考虑了不重叠的情况,但是当我决定采用上述使用空格(或任何分隔符,真的)的方法时,我错过了我为自己创造了这个问题的观点。无论如何,用一个检查重叠计数的函数替换 string.count 对我来说是诀窍。我总共只尝试了 11 次 ;)
  • @mkathuri 它发生了......我认为这些点只能通过犯错来学习。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多