1 条题解
-
0
问题重述
- 屋顶大小为 ,左下角在 。
- 屋顶板大小为 ,不能旋转,可以超出屋顶边界。
- 已经有两块屋顶板被放置好,左下角坐标分别为 和 ,它们不重叠,且都部分覆盖屋顶。
- 问:能否在不移动这两块板的情况下,用相同大小的板铺满整个屋顶(板之间不重叠,可边缘接触)?
关键观察
因为板不能旋转且只能平移放置,所以所有板的放置位置是:
$$(x_1 + i \cdot a,\ y_1 + j \cdot b) \quad \text{或类似的平移} $$其中 是整数。这意味着所有板会形成网格对齐结构。
已经放置的两块板相当于确定了网格的“偏移”。它们可能对齐在同一行( 坐标差是 的倍数)或同一列( 坐标差是 的倍数),或者完全错开。
分析过程
1. 特殊情况:(两块板在同一列)
此时两块板的 坐标相同,但 坐标不同。 要能铺满屋顶,必须能沿着 方向用板覆盖所有高度。 由于板高度为 ,两块板的 坐标差必须是 的倍数,否则无法对齐铺满。 即:
如果成立,则可行;否则不可行。
2. 特殊情况:(两块板在同一行)
类似地,需要两块板的 坐标差是 的倍数:
3. 一般情况: 且
这时两块板既不在同一行也不在同一列。 可以证明:要能铺满,必须满足两个条件之一:
- 两块板在同一“列网格”上(即 坐标差是 的倍数),那么可以沿列方向铺满;
- 或者两块板在同一“行网格”上(即 坐标差是 的倍数),那么可以沿行方向铺满。
数学表达式:
$$(x_1 - x_2) \bmod a = 0 \quad \text{或} \quad (y_1 - y_2) \bmod b = 0 $$为什么? 假设能铺满,考虑 和 的邻域。如果两块板在 方向不对齐,则在 方向无法形成连续的列覆盖;如果 方向不对齐,则在 方向无法形成连续的行覆盖。唯一的铺满方式只能是“按行铺”或“按列铺”,因此必须满足上述条件之一。
最终判断逻辑
如果 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示例验证
以样例第一个测试用例: ,,满足条件 →
Yes第二个测试用例: 和 不满足 →
No复杂度
每个测试用例 时间,总复杂度 ,满足 。
- 1
信息
- ID
- 6557
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者