题目描述

整体分析

先读取第一行的三个数,再设计算法。
这里我比较笨,没有用什么好的算法,却也没厚着脸皮直接完全暴力求解……(不过还是暴力解法)

数据结构的话,N×N的boolean数组即可,乍一看是不可避免的。

对于萤石,就是很简单啦,直接开双层循环就完事,构成一个5×5方阵即可。
对于火把,就需要先处理~~

我们分别对黑色圈内的和非黑色圈内的部分进行处理即可。

注意细节

细节分析起来挺曲折的,虽然这题还是不难。

需要注意的是数组越界,在Java里用了二维数组还涉及边界情况,就跑不开ArrayIndexOutOfBoundsException,必须对边界情况详细分析。

另需要注意的是我们用的数组是[0 ~ N-1][0 ~ N-1],然而输入的是1 ~ N,这个一定不要搞错了呀。

自测WA

按照提供的测试用例测试,结果应该是12,打印的是16,多了4个,于是发现bug在与我没看清楚“火把”的7、9、17、19四个位置是true(亮的),于是乎,修复。

不断的自测,感觉良好,提交去~~

第一次提交——RE+WA


分析一下为啥WA,其实发现就是上面说的那个问题,没理解清楚给的测试数据其实是我们人类计数的方式(从1开始),从而处理错了。

再分析RE,运行时的异常一般来说这里就是数组越界了,读读代码看不出来,那就测试边界。

发现是-1越界,就找代码,发现这个:

其实想想也是,既然是合理的算法,为啥会重复报warning呢,必是Ctrl+V的时候没改好……
修复:

再次提交~~

第二次提交——RE


没WA证明思路基本OK,RE就还是数组越界,很烦人……

于是想到自己的测试在矩阵左上角测的,右下角没测试,补测一下:

太真实了,真的错了,55555~~

修复一下:

反复测试,觉得真的ok了,最终提交~~

第三次提交——AC


好开心啊!(虽然这题初中一年级水平,wtcl~~)

AC代码(Java)

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);//矩阵大小参数int matrixLen = scanner.nextInt();//火把数int torchNum = scanner.nextInt();//萤石数int candNum = scanner.nextInt();//创建矩阵boolean[][] matrix = new boolean[matrixLen][matrixLen];//填充火把可以照亮的位置for (int i = 0; i < torchNum; i++) {int x = scanner.nextInt() - 1;int y = scanner.nextInt() - 1;//左不越界if (x - 1 >= 0) {//左不越界+上不越界if (y - 1 >= 0) {matrix[x-1][y-1] = true;}//左不越界+下不越界if (y + 1 < matrixLen) {matrix[x-1][y+1] = true;}}//右不越界if (x + 1 < matrixLen) {//右不越界+上不越界if (y - 1 >= 0) {matrix[x+1][y-1] = true;}//右不越界+下不越界if (y + 1 < matrixLen) {matrix[x+1][y+1] = true;}}for (int j = 0; j <= 2; j++) {//左不越界if (x - j >= 0) {matrix[x-j][y] = true;}//右不越界if (x + j < matrixLen) {matrix[x+j][y] = true;}//上不越界if (y - j >= 0) {matrix[x][y-j] = true;}//下不越界if (y + j < matrixLen) {matrix[x][y+j] = true;}}}//填充萤石可以照亮的位置for (int i = 0; i < candNum; i++) {int x = scanner.nextInt() - 1;int y = scanner.nextInt() - 1;for (int j = 0; j <= 2; j++) {if (x - j >= 0) {for (int k = 0; k <= 2; k++) {if (y - k >= 0) {matrix[x-j][y-k] = true;}if (y + k < matrixLen) {matrix[x-j][y+k] = true;}}}if (x + j < matrixLen) {for (int k = 0; k <= 2; k++) {if (y - k >=0) {matrix[x+j][y-k] = true;}if (y + k < matrixLen) {matrix[x+j][y+k] = true;}}}}}//计算数量int count = 0;for (int i = 0; i < matrixLen; i++) {for (int j = 0; j < matrixLen; j++) {if (!matrix[i][j]) {count++;}}}System.out.println(count);//关闭输入流scanner.close();}
}

说明

写OJ写得少,写的就很臃肿,还望dl们不吝赐教~~
OrzOrz

把握不好数组边界的危害(记洛谷P1789题RE+WA的经历,Java语言描述)相关推荐

  1. 你知道考的是平方数吗(记洛谷P1876题RE+WA的经历,Java语言描述)

    前言 这题用Java,自己作吧你,好好的C不用-- 题目要求 P1876题目链接 分析 这个题其实你如果正常做是没法做的,因为2^40诶,1T吧,偶买噶-- 其实就是一个求平方数的问题. 为啥是平方数 ...

  2. 不用long的危害(记洛谷P5534题的WA经历,Java语言描述)

    闲来无事想起了洛谷,打卡签到刷他几个题再说,殊不知这是杯具的开始~~ P5534是一个弱智题,入门级别,只需要知道下面公式即可,而且还不止一个公式. 下面是我用的公式(高中的感觉真让人怀念啊~~): ...

  3. for循环两个分号之间不要乱加判断条件(记洛谷P2141题WA的经历,Java语言描述)

    题目要求 P2141题目链接 分析 暴力法可解--我们只需遍历一遍数组,在里面再遍历一次,再遍历一次,共三层嵌套,需要保证内层counter数值不能与外面诸层的counter相同~~ 暴力还可防漏,很 ...

  4. 【OJ】洛谷红题题解锦集(Java语言描述)

    前言 能看这篇文章,想来你可能是小白(或者切题的大佬),那这里会把洛谷的红题(当前只有P字段的本谷题目)进行一下整理,希望会合你口味吧-- 本文只附个人题解链接,不附题目链接(题解中自带),如想刷题请 ...

  5. 浮点高精求和(洛谷P2393题题解,弃坑Java拥抱C++)

    题目要求 P2393题目链接 分析 这题实则是变态的大浮点加法,众所周知的是浮点不精确,按照IEEE754来. 原先使用Java写的,但下面分析一下为什么不能用Java写. 这代码本来是这么写的: i ...

  6. Java每次输入一个字符+高精度取整计算(记洛谷P2394题WA+TLE+RE的经历,Java语言描述)

    祝大家圣诞节快乐 卑微菜鸡深夜写博客~~~55555 其实这题真的有毒 这题你要是C/C++,虽然语法不是辣么直接,但几行而已: #include<bits/stdc++.h>using ...

  7. 判断条件要仔细推敲(记洛谷P1317题WA的经历,Java语言描述)

    题目要求 P1317题目链接 分析 我想的比较复杂, 就是外面有一个大循环,保证遍历数组. 然后是直到下坡我们才能进内层循环,否则往后挪一个(i++). 进内循环以后必须是上坡才能counter++, ...

  8. 处理大数必选BigInteger(记洛谷P1009题WA的经历,Java语言描述)

    题目大意 P1009题目链接 分析 题目很简单,但是这是阶乘啊,更何况是阶乘和,long都不够,用int纯属作死-- Java并无C的longlong,但我们有java.math.BigInteger ...

  9. 坑爹的Java除法取整(记洛谷P5709题WA的经历,Java语言描述)

    题目要求 P5709题目链接 分析 一看,这就是水题啊... 问题是,看看这AC-Rate,吓不吓人~~~ 所以我们应该去分析这里的坑(当时我也是头铁跪了多次--) 读完题我们可能会想直接去将s/t以 ...

最新文章

  1. C语言网络编程:socket函数
  2. python定义浮点数数组_tensorflow之tf.record实现存浮点数数组
  3. WINDOWS下调用GetTokenInformation的奇怪之处--两次调用
  4. 读书笔记--《机器人时代》
  5. 北斗导航 | RAIM奇偶矢量法理论分析(公式推导:原理图)
  6. canvas中strokeRect的渲染问题strokeRect把一像素的边框渲染成两像素
  7. RabbitMQ交换机简介
  8. iOS自定义弹出视图、收音机APP、图片涂鸦、加载刷新、文件缓存等源码
  9. The Apache Tomcat installation at this directory is version,tomcat
  10. HBase1.2.3 数据模型
  11. css实现图片虚化_什么? CSS 阴影竟然还有这种骚操作 ?
  12. web开发环节,阿里前端工资多少
  13. 【工具推荐】在线latex公式编辑器(可用鼠标交互)
  14. kettle脚本Linux执行,kettle在linux下面用于shell脚本执行:转换或者作业
  15. STM32-HAL-SPI-读写W25Q128FV-JEDEC ID(1)
  16. 最详细的golang + 私库(gitlab gitee) 模块开发 这一篇文章解决所有问题
  17. MJExtension使用指导
  18. 计算机网络相关拓展材料
  19. MySQL Community Server 8.0 安装配置方法图文教程
  20. AO采集用友oracle,AO系统采集用友GRP-R9导出的ASD文件全过程

热门文章

  1. 测试用例设计方法 - 场景分析法
  2. hdu3652(数位dp)
  3. 总结一下HtmlAgilityPack
  4. TreeView递归系统目录
  5. 关于c#中全局类变量的建立
  6. oracle创建用户及授权等相关操作
  7. Nignx出现failed (3: The system cannot find the path specified)问题
  8. 计算机组成实验微程序控制器实验,计算机组成原理实验报告3++微程序控制器实验.doc...
  9. 计算机基础职教云答案,计算机基础课程答案
  10. memory php 变量,php入门-变量