【Mc生存】插火把 Java入门

题目描述

话说有一天 linyorson 在“我的世界”开了一个 n×n 的方阵,现在他有 mm个火把和 k 个萤石,分别放在 (x1,y1)∼(xm,ym) 和 (o1,p1)∼(ok,pk) 的位置,没有光并且没放东西的地方会生成怪物。请问在这个方阵中有几个点会生成怪物?

P.S. 火把的照亮范围是:

    |暗|暗| 光 |暗|暗|
    |暗|光| 光 |光|暗|
    |光|光|火把|光|光|
    |暗|光| 光 |光|暗|
    |暗|暗| 光 |暗|暗|

萤石:

    |光|光| 光 |光|光|
    |光|光| 光 |光|光|
    |光|光|萤石|光|光|
    |光|光| 光 |光|光|
    |光|光| 光 |光|光|

输入格式

输入共 m+k+1行。
第一行为 n,m,k。
第 2到第 m+1 行分别是火把的位置 xi​,yi​。
第 m+2到第 m+k+1 行分别是萤石的位置 oi​,pi​。

注:可能没有萤石,但一定有火把。

输出格式

有几个点会生出怪物。

输入输出样例

输入 #1复制

5 1 0
3 3

输出 #1复制

12

说明/提示

数据保证,1≤n≤100,1≤m+k≤25,11≤m≤25,0≤k≤5。

代码实现

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n,m,k;
        n=sc.nextInt();
        m=sc.nextInt();
        k=sc.nextInt();
        int[][] arr=new int[n+4][n+4];

            for (int i = 0; i < m; i++) {
                int x=sc.nextInt();
                int y=sc.nextInt();
                x=x+1;
                y=y+1;

                        arr[x][y]=1;
                        arr[x+1][y]=1;
                        arr[x+2][y]=1;
                        arr[x-1][y]=1;
                        arr[x-2][y]=1;
                        arr[x][y+1]=1;
                        arr[x][y+2]=1;
                        arr[x][y-1]=1;
                        arr[x][y-2]=1;
                        arr[x+1][y+1]=1;
                        arr[x-1][y-1]=1;
                        arr[x-1][y+1]=1;
                        arr[x+1][y-1]=1;

            }


            for (int i = 0; i < k; i++) {
                int x=sc.nextInt();
                int y=sc.nextInt();
                x=x+1;
                y=y+1;
                for (int i1 = x-2; i1 <= x+2; i1++) {
                    for (int j = y-2; j <=y+2 ; j++) {
                        arr[i1][j]=1;
                    }
                }
            }
            int count=0;
            for (int i = 2; i < n+2; i++) {
                for (int j = 2; j <n+2 ; j++) {
                    if (arr[i][j]==0) {
                        count++;
                    }

                }
            }
            System.out.println(count);
    }
}

思路

为了防止地图越界,将n×n的二维数组扩大为(n+4)×(n+4),最后统计时只统计原二维数组。

火把暴力  萤石比较简单

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值