1 条题解

  • 0
    @ 2026-6-19 10:30:12

    📝 题目大意

    在一个 15×1515 \times 15 的网格中,格子按同心环交替涂成黑色和白色(最外圈为黑色)。给定行号 RR 和列号 CC,输出该格子的颜色。

    💡 解题思路

    1. 题目分析

      • 网格大小固定为 15×1515 \times 151R,C151 \leq R, C \leq 15,数据量极小,无需担心效率。
      • 图中颜色呈同心环分布:最外层(第 1 圈)为黑色,向内第 2 圈为白色,第 3 圈为黑色……以此类推,颜色随圈数奇偶交替。
      • 关键洞察:一个格子处于第几圈,取决于它到四条边界的最短距离
    2. 算法推导

      • 定义 a=min{R,  C,  16R,  16C}a = \min\{\,R,\; C,\; 16-R,\; 16-C \,\},即格子到上、下、左、右四条边界的最近距离(以格数计,RRCC 从 1 开始)。
        • R:距离上边界的距离
        • C:距离左边界的距离
        • 16 - R:距离下边界的距离(因为最下行是 15,15R+1=16R15 - R + 1 = 16 - R
        • 16 - C:距离右边界的距离
      • aa 的取值代表该格子所在的"圈号":a=1a=1 是最外圈,a=2a=2 是次外圈,以此类推,最内圈(中心点 (8,8)(8,8))的 a=8a=8
      • 根据图示,最外圈(a=1a=1)为黑色,因此规则为:圈号为奇数 → 黑色,圈号为偶数 → 白色
      • 即判断 a % 2 == 1:若成立输出 "black",否则输出 "white"
    3. 边界与细节

      • 输入 R,CR, C 均为 1-indexed,16-R16-C 的计算方式依赖于此。
      • 中心点 (8,8)(8,8)a=8a=8(偶数),输出 white,与图示一致。
      • 注意输出大小写严格区分:black / white 均为小写。

    ⏱️ 复杂度分析

    • 时间复杂度O(1)O(1),仅常数次比较和取模运算。
    • 空间复杂度O(1)O(1),仅使用几个整型变量。

    💻 标准代码 (C++)

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
        int r,c;
        cin >> r >> c;
        // 计算当前格子到四条边界的最近距离,即所在的"圈号"
        int a = min({r, c, 16 - r, 16 - c});
        // 圈号为奇数 → 黑色,偶数 → 白色
        if(a % 2 == 1)
            cout << "black";
        else
            cout << "white";
        return 0;
    }
    
    • 1

    信息

    ID
    625
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者