1 条题解

  • 0
    @ 2025-8-24 21:45:48

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Felix72
    公式和原理永远无法推论人情。

    搬运于2025-08-24 21:45:48,当前版本为作者最后更新于2025-05-04 22:54:05,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题号这么小的黑题还没有题解,我给完善一下。

    一个想法是枚举三块拼图和他们的旋转角度、是否翻转以及坐标,这样的复杂度是 O(K3N4)O(K^3N^4) 的(忽略枚举方向的 88 倍常数)。

    要优化这个算法,我们有以下方法:

    • 定义一块拼图的左上坐标为其最左边的有颜色的单元格坐标,若有多个取最上面的坐标。若已知原拼图的左上坐标来自第 ii 块拼图,则该位置来自第 ii 块拼图的左上坐标;
    • 使用哈希快速判断两块拼图是否相等。

    第一个优化使得枚举前两块拼图时无需枚举其位置,第二个优化使得枚举第三块拼图时可以 O(1)O(1) 判断,时间复杂度来到 O(K2N2)O(K^2N^2)

    如果 R,CR, C 如题面说的一样在 100100 之内,那这个复杂度确实是能过的(1004=108100^4 = 10^8),但是数据中 R,CR, C 好像和 N,MN, M 一个量级,再加上 88 倍常数的影响,肯定是无法通过的。这时需要一些剪枝:

    • 枚举所有的 x,y,zx, y, z,先判断一下这三块拼图是否在颜色个数和上和原拼图相等,这样可以筛出一些二元组 (i,j)(i, j),保证 i,ji, j 同时存在的拼法一定非法。这样 O(K2)O(K ^ 2) 就跑不满了;
    • 对一块拼图,先枚举其 88 中不同的方向,如果其中有相同的,后面就不枚举它,这样 88 倍常数也跑不满;
    • 对一块拼图,先计算出其左上坐标,判合法的时候就无需再算一次了,这样 O(N2)O(N^2) 带的常数变小。

    这三个剪枝不容易同时卡掉至少两个(或者说数据没卡),可以通过。

    • 1

    信息

    ID
    2212
    时间
    6000ms
    内存
    500MiB
    难度
    7
    标签
    递交数
    0
    已通过
    0
    上传者