栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

洛谷P1830Java题解(小数据直接模拟

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

洛谷P1830Java题解(小数据直接模拟

目录
  • 题目大意
  • 解题思路
  • 具体代码
    • 1.准备工作
    • 2.遍历标记
    • 3.处理最终答案


题目大意


解题思路

要求判断是否轰炸,以及轰炸的次数和最后一次轰炸是第几轮,本题采用数组来做,所以肯定有一个int数组来记录轰炸的次数,设为times,一个int数组来记录最后一次轰炸是第几轮,设为ends。

模拟就是问什么设什么,然后按照题目进行处理即可。

其实两个数组可以得到最终答案,就是遍历前面的time数组,就可以得到Y或N的结果,但是为了最后的美观我又增加了一个String数组keys来汇总最后的答案。

具体代码 1.准备工作

我属于有点强迫症的,所以一般变量的设定都是放在一块。
代码如下(示例):

import java.util.Scanner;
public class Main {
    static int n,m,x,y;
    static int[][]times;
    static int[][]ends;
    static String[] keys;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        m = sc.nextInt();
        x = sc.nextInt();
        y = sc.nextInt();

        times = new int[n+1][m+1];
        ends = new int[n+1][m+1];
        keys = new String[y+1];
2.遍历标记

每次的轰炸区域是x1到x2,y1到y2的一个矩形,一共有x次。首先,标记轰炸矩形需要进行两重for循环,将区域内所有的点在times上记录,int数组创建时,默认初始值为0,所以进行times[a][b]++操作计数即可得到轰炸次数。

而ends数组采用覆盖标记,共进行x次轰炸,每次的序号就是i+1,直接在对应的轰炸区域进行标记即可。

以上操作共有x次,所以在外层再套用一层for循环,省去了输入再读取的操作。

代码如下(示例):

for(int i = 0;i < x;i++){
            int x1 = sc.nextInt();
            int y1 = sc.nextInt();
            int x2 = sc.nextInt();
            int y2 = sc.nextInt();
            for(int a = x1;a <= x2;a++){
                for(int b = y1;b <= y2;b++){
                    times[a][b]++;
                    ends[a][b] = i+1;
                }
            }
        }
3.处理最终答案

由于最终要判断是否被轰炸,并且输出Y和N,应当采用字符类型的数组来进行汇总最后答案,不过此处要注意,建议使用String类型,若是使用char类数组将出现int类型转换的问题。

最后有y个关键点要进行判断,故进行y次输入,在times和ends中关键点找到对应的答案,并按照题目顺序进行拼接(toString方法),记录到keys数组中,最后进行输出即可。

代码如下(示例):

		for(int i = 0;i < y;i++){
            int xx = sc.nextInt();
            int yy = sc.nextInt();
            if(times[xx][yy] != 0){
                int a = times[xx][yy];
                int b = ends[xx][yy];
                keys[i] = "Y"+" "+a+" "+b;
            }
            else keys[i] = "N";
        }

        for(int i = 0;i < y;i++){
            System.out.println(keys[i]);
        }

以上,应该还有更简洁的方法。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/327535.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号