统计
  • 建站日期:2019-12-01
  • 文章总数:2002 篇
  • 评论总数:2124 条
  • 分类总数:21 个
  • 最后更新:11月21日
文章 未分类

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

程序员阿鑫
首页 未分类 正文


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

#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》的全部内容,

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

版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!

-- 展开阅读全文 --
这篇文章最后更新于2020-12-28,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
Java 蓝桥杯 国赛 第十一届 C组 试题D:阶乘约数
« 上一篇
Java 蓝桥杯 国赛 第十一届 C组 试题B:合数个数
下一篇 »

发表评论