1 条题解

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

    📝 题目大意

    有一个 A×BA \times B 的瓷砖,以 NNNN 列排列,形成 (A×N)×(B×N)(A \times N) \times (B \times N) 的格子图。瓷砖 (1,1)(1,1) 为白色,相邻瓷砖颜色不同(类似国际象棋棋盘)。用 . 表示白色、# 表示黑色,输出整个格子图。

    💡 解题思路

    1. 题目分析N,A,B10N, A, B \leq 10,数据范围极小,直接模拟即可。核心是确定每个位置属于哪个瓷砖以及该瓷砖的颜色。

    2. 算法推导

      • 瓷砖的颜色由其在 N×NN \times N 排列中的行列位置 (itile,jtile)(i_{\text{tile}}, j_{\text{tile}}) 决定:若 (itile+jtile)(i_{\text{tile}} + j_{\text{tile}}) 为偶数则为白色(.),奇数则为黑色(#)。这等价于标准的棋盘染色,且满足 (1,1)(1,1) 为白色、相邻瓷砖异色的条件。
      • 代码中 flag 变量控制当前瓷砖行的起始颜色(flag = true 表示该行起始瓷砖为白色 .flag = false 表示起始为黑色 #)。每处理完一行瓷砖,flag 取反。
      • 对于每个瓷砖行,flag1 控制当前瓷砖列的颜色,初始值 flag1 = !flag 使得瓷砖行之间颜色交替。每输出完一个瓷砖的 BB 列后,flag1 取反。
      • 外层两层循环(i 为瓷砖行,j 为瓷砖内的行)控制输出总行数 A×NA \times N;内层两层循环(k 为瓷砖列,l 为瓷砖内的列)控制输出每行的 B×NB \times N 个字符。
    3. 边界与细节

      • 注意 flag1 的初始值 !flag:当 i=0flag=trueflag1=false,输出 .,符合瓷砖 (1,1)(1,1) 为白色的要求。
      • 每行输出结束后需要换行(endl)。
      • 数据范围小,无需优化。

    ⏱️ 复杂度分析

    • 时间复杂度O(N2AB)O(N^2 \cdot A \cdot B),即输出总格子数 AN×BNA \cdot N \times B \cdot N,最多 10410^4 量级。
    • 空间复杂度O(1)O(1),仅使用常数个变量。

    💻 标准代码 (C++)

    #include <bits/stdc++.h>
    using namespace std;
    int main () {
        int n, a, b;
        cin >> n >> a >> b;
        bool flag = true;               // 当前瓷砖行的起始颜色:true 表示该行第一个瓷砖为白色(.)
        for (int i = 0; i < n; i++) {   // 遍历瓷砖行(共 N 行瓷砖)
            for (int j = 0; j < a; j++) { // 每个瓷砖有 A 行,重复输出
                bool flag1 = !flag;      // 当前瓷砖行第一个瓷砖的颜色:!flag 实现行间交替
                for (int k = 0; k < n; k++) {   // 遍历瓷砖列(共 N 列瓷砖)
                    for (int l = 0; l < b; l++) { // 每个瓷砖有 B 列
                        if (flag1) {
                            cout << "#";         // 黑色瓷砖
                        } else {
                            cout << ".";         // 白色瓷砖
                        }
                    }
                    flag1 = !flag1;              // 切换到下一个瓷砖列,颜色取反
                }
                cout << endl;                    // 一行输出完毕
            }
            flag = !flag;                        // 切换到下一行瓷砖,起始颜色取反
        }
        return 0;
    }
    
    • 1

    信息

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