Java 蓝桥杯 国赛 第十一届 C组 试题C: 扩散 - 程序员阿鑫-带你一起秃头!

Java 蓝桥杯 国赛 第十一届 C组 试题C: 扩散

作者: 程序员阿鑫

好兄弟,我们一起掉头发!

手机扫码查看

特别声明:文章多为网络转载,资源使用一般不提供任何帮助,特殊资源除外,如有侵权请联系!

#C 扩散

本题总分:10 分


问题描述

小蓝在一张无限大的特殊画布上作画。
这张画布可以看成一个方格图,每个格子可以用一个二维的整数坐标表示。
小蓝在画布上首先点了一下几个点:(0 000 00),(2020 2020202011 1111),(11 111114 1414),(2000 200020002000 20002000)。只有这几个格子上有黑色,其它位置都是白色的。
每过一分钟,黑色就会扩散一点。具体的,如果一个格子里面是黑色,它就会扩散到上、下、左、右四个相邻的格子中,使得这四个格子也变成黑色(如果原来就是黑色,则还是黑色)。
请问,经过 2020 20202020 分钟后,画布上有多少个格子是黑色的。


答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。


11157392 || 20312088

calcCode:

public class Test {

    static final int n = 2020;

    public static void main(String[] args) {
        int[][] resource = { {0, 0}, {2020, 11}, {11, 14}, {2000, 2000} };
        boolean[][] marked = new boolean[n << 1 | 1][n << 1 | 1];
        long res = 0;
        for (int k = 0, x, y; k < 4; k++) {
            x = resource[k][0];
            y = resource[k][1];
            for (int i = -n; i <= n; i++) {
                if (x + i < 0) continue;
                for (int r = n - abs(i), j = -r; j <= r; j++) {
                    if (x + i < 0 || y + j < 0 || marked[x + i][y + j]) continue;
                    marked[x + i][y + j] = true;
                    res++;
                }
            }
        }
        System.out.println(res);
    }

    static int abs(int n) { return n > 0 ? n : -n; }
}

反正比赛的时候我填的是这个结果
但还有人说这里的扩散可以扩散到负坐标,防杠还是写出来吧

public class Test {

    static final int n = 2020;

    public static void main(String[] args) {
        int[][] resource = { {0, 0}, {2020, 11}, {11, 14}, {2000, 2000} };
        boolean[][] marked = new boolean[n << 2][n << 2];
        long res = 0;
        for (int k = 0, x, y; k < 4; k++) {
            x = resource[k][0] + n;
            y = resource[k][1] + n;
            for (int i = -n; i <= n; i++)
                for (int r = n - abs(i), j = -r; j <= r; j++) {
                    if (marked[x + i][y + j]) continue;
                    marked[x + i][y + j] = true;
                    res++;
                }
        }
        System.out.println(res);
    }

    static int abs(int n) { return n > 0 ? n : -n; }
}

以上是《Java 蓝桥杯 国赛 第十一届 C组 试题A:美丽的 2》的全部内容,

感谢您对程序员阿鑫博客的支持!

分享到:
打赏
未经允许不得转载:

作者: 程序员阿鑫, 转载或复制请以 超链接形式 并注明出处 程序员阿鑫-带你一起秃头!
原文地址: 《Java 蓝桥杯 国赛 第十一届 C组 试题C: 扩散》 发布于2020-12-28

评论

切换注册

登录

忘记密码?

您也可以使用第三方帐号快捷登录

切换登录

注册

Java 蓝桥杯 国赛 第十一届 C组 试题C: 扩散

长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏