1 条题解

  • 0
    @ 2026-8-11 22:20:34

    画笔 题解

    本题主要考察二维数组。

    求曼哈顿距离:

    int getdis(int cx, int cy, int x, int y) { // cx 代表当前 x,cy 代表当前 y 
        return abs(cx - x) + abs(cy - y);
    }
    

    染色操作:

    可求出所有点与当前点的曼哈顿距离(遍历整个二维数组),将符合条件的染色。

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            if (getdis(cx, cy, i, j) < k)
                s[i][j] = op;
        }
    }
    

    判断是否出界:

    只需要判断横纵坐标是否大于 nn 或等于 00

    if (op == 'L') {
        if (cy - 1 >= 1) {
            cy--;
        }
    } else if (op == 'R') {
        if (cy + 1 <= n) {
            cy++;
        }
    } else if (op == 'U') {
        if (cx - 1 >= 1) {
            cx--;
        }
    } else if (op == 'D') {
        if (cx + 1 <= n) {
            cx++;
        }
    }
    

    完整 AC 代码:

    #include <bits/stdc++.h>
    using namespace std;
    
    int getdis(int cx, int cy, int x, int y) {
        return abs(cx - x) + abs(cy - y);
    }
    
    int main() {
        int n, k;
        cin >> n >> k;
        char op;
    
        char s[100][100];
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                s[i][j] = '.';
            }
        }
    
        int cx = (n + 1) / 2;
        int cy = (n + 1) / 2;
    
        while (cin >> op) {
            if (op == 'L') {
                if (cy - 1 >= 1) {
                    cy--;
                }
            } else if (op == 'R') {
                if (cy + 1 <= n) {
                    cy++;
                }
            } else if (op == 'U') {
                if (cx - 1 >= 1) {
                    cx--;
                }
            } else if (op == 'D') {
                if (cx + 1 <= n) {
                    cx++;
                }
            } else {
                for (int i = 1; i <= n; i++) {
                    for (int j = 1; j <= n; j++) {
                        if (getdis(cx, cy, i, j) < k) {
                            s[i][j] = op;
                        }
                    }
                }
            }
        }
    
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                cout << s[i][j];
            }
            cout << endl;
        }
    
        return 0;
    }
    
    • 1

    信息

    ID
    12624
    时间
    1000ms
    内存
    512MiB
    难度
    4
    标签
    递交数
    29
    已通过
    17
    上传者