1 条题解

  • 0
    @ 2026-4-17 16:39:49

    问题重述

    • 屋顶大小为 w×hw \times h,左下角在 (0,0)(0,0)
    • 屋顶板大小为 a×ba \times b不能旋转,可以超出屋顶边界。
    • 已经有两块屋顶板被放置好,左下角坐标分别为 (x1,y1)(x_1, y_1)(x2,y2)(x_2, y_2),它们不重叠,且都部分覆盖屋顶。
    • 问:能否在不移动这两块板的情况下,用相同大小的板铺满整个屋顶(板之间不重叠,可边缘接触)?

    关键观察

    因为板不能旋转且只能平移放置,所以所有板的放置位置是:

    $$(x_1 + i \cdot a,\ y_1 + j \cdot b) \quad \text{或类似的平移} $$

    其中 i,ji, j 是整数。这意味着所有板会形成网格对齐结构。

    已经放置的两块板相当于确定了网格的“偏移”。它们可能对齐在同一行yy 坐标差是 bb 的倍数)或同一列xx 坐标差是 aa 的倍数),或者完全错开。

    分析过程

    1. 特殊情况:x1=x2x_1 = x_2(两块板在同一列)

    此时两块板的 xx 坐标相同,但 yy 坐标不同。 要能铺满屋顶,必须能沿着 yy 方向用板覆盖所有高度。 由于板高度为 bb,两块板的 yy 坐标差必须是 bb 的倍数,否则无法对齐铺满。 即:

    y1y2modb=0\lvert y_1 - y_2 \rvert \bmod b = 0

    如果成立,则可行;否则不可行。

    2. 特殊情况:y1=y2y_1 = y_2(两块板在同一行)

    类似地,需要两块板的 xx 坐标差是 aa 的倍数:

    x1x2moda=0\lvert x_1 - x_2 \rvert \bmod a = 0

    3. 一般情况:x1x2x_1 \ne x_2y1y2y_1 \ne y_2

    这时两块板既不在同一行也不在同一列。 可以证明:要能铺满,必须满足两个条件之一:

    • 两块板在同一“列网格”上(即 xx 坐标差是 aa 的倍数),那么可以沿列方向铺满;
    • 或者两块板在同一“行网格”上(即 yy 坐标差是 bb 的倍数),那么可以沿行方向铺满。

    数学表达式:

    $$(x_1 - x_2) \bmod a = 0 \quad \text{或} \quad (y_1 - y_2) \bmod b = 0 $$

    为什么? 假设能铺满,考虑 (x1,y1)(x_1, y_1)(x2,y2)(x_2, y_2) 的邻域。如果两块板在 xx 方向不对齐,则在 xx 方向无法形成连续的列覆盖;如果 yy 方向不对齐,则在 yy 方向无法形成连续的行覆盖。唯一的铺满方式只能是“按行铺”或“按列铺”,因此必须满足上述条件之一。

    最终判断逻辑

    如果 x1 == x2:
        如果 |y1 - y2| % b == 0: 输出 Yes
        否则: 输出 No
    
    否则如果 y1 == y2:
        如果 |x1 - x2| % a == 0: 输出 Yes
        否则: 输出 No
    
    否则:
        如果 (x1 - x2) % a == 0 或 (y1 - y2) % b == 0: 输出 Yes
        否则: 输出 No
    

    示例验证

    以样例第一个测试用例: w=6,h=5,a=2,b=3w=6, h=5, a=2, b=3 (x1,y1)=(1,2)(x_1, y_1) = (-1, -2) (x2,y2)=(5,4)(x_2, y_2) = (5, 4) x1x2, y1y2x_1 \ne x_2,\ y_1 \ne y_2 (x1x2)=6(x_1 - x_2) = -6(6)mod2=0(-6) \bmod 2 = 0,满足条件 → Yes

    第二个测试用例: w=4,h=4,a=2,b=2w=4, h=4, a=2, b=2 (0,0)(0,0)(3,1)(3,1) x1x2, y1y2x_1 \ne x_2,\ y_1 \ne y_2 (x1x2)=3mod2=10(x_1 - x_2) = -3 \bmod 2 = 1 \ne 0 (y1y2)=1mod2=10(y_1 - y_2) = -1 \bmod 2 = 1 \ne 0 不满足 → No

    复杂度

    每个测试用例 O(1)O(1) 时间,总复杂度 O(t)O(t),满足 t104t \le 10^4

    • 1

    信息

    ID
    6557
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    2
    已通过
    1
    上传者