472. Santa 2021 - The Merry Movie Montage | santa-2021
感谢举办这场有趣的比赛。作为新年假期的圣诞老人比赛是我的荣幸,我很高兴这一传统能够延续下去。
我的解决方案是手工构造的。我只使用计算机进行了简单的枚举。
在这个问题中,我们需要构造 3 个字符串,使得:
第二个条件似乎破坏了对称性,但实际上,正是因为这种巨大的破坏,反而留出了通过对称性构建解决方案的空间。
对我来说,关键的想法是 120 个 12xxxxx 形式的排列并不是浪费。
例如,
1273456 1237456 1234756 1234576 1234567
不仅仅是 5 个排列,它还是 2-循环(2-cycle)的一部分:
7 2345612 7 3456123 7 4561234 7 5612345 7 6123456 7 1234561 (7 2345612)
通过寻找不与这些重叠的良好字符串(2-循环的一部分),我发现了像这样的字符串:
1 2345672 1 3456723 1 4567234 1 5672345 1 6723456 1 7234567 (1 2345672)
通过去除与 12xxxxx 重复的部分,我们得到:
345672 1 3456723 1 4567234 1 5672345 1 6723456 1 723456 (长度 45)
如果我们固定 1 和 2,像这样的序列有 5! = 120 个,所以简单的分配将创建 3 个字符串,由 40 个这样的序列和 120 个 12xxxxx 组成。
长度是 45 * 40 + 7 * 120 = 2640。显然,我们可以合并 1234567 和 3456721... 等等,所以长度现在变成了 2440。
更准确地说,由于 12xxxxx 可能是重要序列的一部分,我们在合并它们时需要小心。但这并不是关键问题,因为所有 3 个字符串都包含所有 12xxxxx。
@jpmiller 的这个解决方案看起来很相似。
https://www.kaggle.com/c/santa-2021/discussion/300519
如果我们理解了 2440 解决方案的结构,这就像是一个拼图。
当排行榜更新时,就是开始新比赛的时候了。不眠不休地思考。我做了两次(2430 -> 2429 -> 2428)。
我们从 2440 解决方案开始,它由 40 个以下形式的序列组成:
12 345672 1 3456723 1 4567234 1 5672345 1 6723456 1 723456 (长度 47)
以及 80 个 12xxxxx。
我们应该用“全能”字符(通配符,记为 8)来生成 12xxxxx,因为直接生成效率低下,所以放置 8 的位置应该是:
12 345672 1 3456723 1 456