1 条题解

  • 0
    @ 2025-4-14 13:11:45

    题意分析

    解题思路

    1.首先,根据输入的 (Xsize) 和 (Ysize) 初始化一个二维数组 canvas 来表示画布,将所有元素初始化为 (0)。

    2.接着,对于每个给定的圆,先计算出可能在圆内的像素的坐标范围(通过圆心坐标和半径确定最小和最大的 (x)、(y) 坐标)。

    3.然后,在这个范围内遍历像素,判断每个像素是否满足圆的方程,如果满足则将其颜色设置为圆的颜色。

    4.最后,按行输出画布上每个像素的颜色。

    分析

    实现步骤

    代码实现

    #include <cstdio>
    #include <cmath>
    
    const int MAX_SIZE = 1000;
    
    int canvas[MAX_SIZE][MAX_SIZE];
    
    int main() {
        int Xsize, Ysize, N;
        scanf("%d %d %d", &Xsize, &Ysize, &N);
    
        // 初始化画布
        for (int y = 0; y < Ysize; ++y) {
            for (int x = 0; x < Xsize; ++x) {
                canvas[y][x] = 0;
            }
        }
    
        // 处理每个圆
        for (int i = 0; i < N; ++i) {
            int xi, yi, Ri, ci;
            scanf("%d %d %d %d", &xi, &yi, &Ri, &ci);
    
            // 计算可能在圆内的像素范围
            int minX = (xi - Ri >= 0) ? xi - Ri : 0;
            int maxX = (xi + Ri < Xsize) ? xi + Ri : Xsize - 1;
            int minY = (yi - Ri >= 0) ? yi - Ri : 0;
            int maxY = (yi + Ri < Ysize) ? yi + Ri : Ysize - 1;
    
            for (int y = minY; y <= maxY; ++y) {
                for (int x = minX; x <= maxX; ++x) {
                    if ((x - xi) * (x - xi) + (y - yi) * (y - yi) <= Ri * Ri) {
                        canvas[y][x] = ci;
                    }
                }
            }
        }
    
        // 输出画布
        for (int y = 0; y < Ysize; ++y) {
            for (int x = 0; x < Xsize; ++x) {
                printf("%d", canvas[y][x]);
            }
            printf("\n");
        }
    
        return 0;
    }    
    

    代码说明

    1.MAX_SIZE 定义了画布大小的上限,用于声明 canvas 数组的大小。

    2.canvas 二维数组用于存储画布上每个像素的颜色。

    3.scanf 函数用于读取输入数据,printf 函数用于输出结果,以满足大数据量输入输出的时间要求。

    4.在处理每个圆时,通过计算 minXmaxXminYmaxY 来确定可能在圆内的像素范围,减少了不必要的遍历。

    5.判断像素是否在圆内的条件 (x - xi) * (x - xi) + (y - yi) * (y - yi) <= Ri * Ri 是根据圆的方程实现的。

    • 1

    信息

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