题解:洛谷 AT_abc441_a Black Square

【题目来源】

洛谷:AT_abc441_a [ABC441A] Black Square - 洛谷

【题目描述】

有一个 \(10^{100}\) 行、 \(10^{100}\) 列的网格。

在下文中,从顶部起第 \(i\) 行、从左侧起第 \(j\) 列的单元格表示为单元格 \((i,j)\)

在这个网格中,只有左上角为单元格 \((P,Q)\)\(100\times100\) 的区域被涂成了黑色,所有其他单元格都被涂成了白色。

确定单元格 \((X,Y)\) 是否被涂成了黑色。

【输入】

输入以标准输入的形式给出,格式如下:

\(P\) \(Q\)
\(X\) \(Y\)

【输出】

如果单元格 \((X,Y)\) 被涂成了黑色,输出Yes;否则,输出No

【输入样例】

3 3
5 10

【输出样例】

Yes

【核心思想】

  1. 问题分析:给定一个 \(10^{100} \times 10^{100}\) 的网格,只有左上角为 \((P, Q)\)\(100 \times 100\) 区域被涂黑。判断单元格 \((X, Y)\) 是否在黑色区域内。这是一个矩形区域判定问题,核心在于判断点 \((X, Y)\) 是否落在矩形 \([P, P+99] \times [Q, Q+99]\) 内。

  2. 算法选择

    • 直接坐标比较:判断 \(X\) 是否在 \([P, P+99]\) 范围内且 \(Y\) 是否在 \([Q, Q+99]\) 范围内
  3. 关键步骤

    • 读入数据\(P, Q, X, Y\)
    • 矩形包含判定
      • \(P \leq X \leq P + 99\)\(Q \leq Y \leq Q + 99\),输出 Yes
      • 否则输出 No
    • 等价于:\(X \in [P, P+100-1]\)\(Y \in [Q, Q+100-1]\)
  4. 时间/空间复杂度

    • 时间复杂度:\(O(1)\)
    • 空间复杂度:\(O(1)\)
  5. 矩形区域判定的核心思想

    • 坐标系的明确:题目中 \((i, j)\) 表示第 \(i\) 行第 \(j\) 列,\(P, Q\) 为黑色区域左上角。黑色区域覆盖行范围 \([P, P+99]\) 和列范围 \([Q, Q+99]\)(共 \(100\)\(100\) 列)
    • 边界包含性\(100 \times 100\) 的区域从 \((P, Q)\) 开始,到 \((P+99, Q+99)\) 结束,因此右边界为 \(P+100-1\) 而非 \(P+100\)
    • 大网格的无关性\(10^{100}\) 的巨大尺寸只是背景,不影响判定逻辑,因为黑色区域固定为 \(100 \times 100\)
    • 适用于基础坐标判定、矩形包含类入门问题

【算法标签】

入门 #模拟

【代码详解】

#include <bits/stdc++.h>
using namespace std;

int p, q, x, y;

int main()
{
    // 输入
    cin >> p >> q >> x >> y;

    // 检查点(x,y)是否在矩形内
    if (x >= p && x <= p + 100 - 1 && y >= q && y <= q + 100 - 1)
        cout << "Yes" << endl;  // 点在矩形内
    else
        cout << "No" << endl;   // 点在矩形外

    return 0;
}

【运行结果】

3 3
5 10
Yes
posted @ 2026-08-27 11:05  团爸讲算法  阅读(5)  评论(0)    收藏  举报