【发布时间】:2020-01-08 19:25:26
【问题描述】:
我在竞争性程序员手册中看到了对某个问题的解释,但我并不真正理解它是如何包含该问题的所有解决方案的,我想知道是否有人可以为我解释一下。如果我遗漏了有关问题的某些内容,我不确定我是否只是不正确理解解决方案。问题和解决方案的图片如下:
根据我的理解,问题只是要求子网格(构成 a x b 或 a x a 框的四个角),其中每个角都是黑色的。他们的解决方案(据我了解)是您计算每列中黑盒对的数量,然后使用公式 count(count-1)/2 计算总数。如果我理解正确,我的问题是这如何涵盖所有情况?我脑海中的具体例子是这样的:
X O O O O O
O X O O O O
O O X O O O
X O O O O O
O X O O O O
O O X O O O
和
X X X O O O
O O O O O O
O O O O O O
X X X O O O
O O O O O O
O O O O O O
使用提供的解决方案,这两个框不会给出相同的答案吗?您将得到两个输入的 count = 3,尽管它们具有不同的解决方案,但每个输入的总输出为 3。我只是觉得在解决方案方面我遗漏了一些东西。
感谢您的帮助。
【问题讨论】:
-
您独立计算每对行的黑盒对数,然后在对结果求和之前应用公式。在第一种情况下,我们有三对分别计数为 1 的行。在公式总和为 0 之后变成 1*0/2 = 0。在第二种情况下,我们有一对计数为 3 的行,在公式之后得到 3*2/2 = 3。跨度>
-
天哪,我太笨了。谢谢吨!我只是有点忘了他们提供的代码只是内部循环而不是整个事情,所以 count(count-1)/2 在每一行的末尾进行评估。再次感谢您!
-
能告诉我书名和作者吗?
-
@Evg 竞争程序员手册,作者 Antti Laaksonen。可在线免费获取:cses.fi/book/book.pdf
-
@user2582118,谢谢!