【CSP:202206-2】寻宝!大冒险!(Java)

2024-08-27 14:44
文章标签 java csp 大冒险 寻宝 202206

本文主要是介绍【CSP:202206-2】寻宝!大冒险!(Java),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接

  • 202206-2 寻宝!大冒险!

题目描述

描述
格式
1
2

求解思路

  • 哈希集合:由于L的数据范围较大,我们通过矩阵存储整个地图并不现实。因此,可以将每个点的信息存放在一个哈希集合中,根据藏宝图上的点去判断能否和集合里边的点对应上。
  • 解题思路:
    • 创建一个Point类来存放点的数据,因为需要用到哈希集合,所以重写equals方法和hashCode方法。
    • map数组存放藏宝图的坐标。在进行遍历时,依次假设每个点作为藏宝图的起点,将起点对应上之后更新藏宝图与大地图对应点的坐标,flag表示当前点作为藏宝图起点是否成立。
    • (map[j][k] == 1) != set.contains(new Point(mapX + j, mapY + k)) :表示藏宝图中的点和集合中的点没有对应上。
    • mapX + k > L || mapY + j > L:表示藏宝图上的点已经越界。
  • 需要注意:
    1. 因为需要用到哈希集合,Point类在进行比较时比较的是属性值xy,所以需要重写equals方法和hashCode方法。详情可见:为什么重写 equals 方法就必须重写 hashCode 方法?
    2. 在更新藏宝图的坐标时,需要注意区分横纵坐标。确保横坐标对应横坐标,纵坐标对应纵坐标。

实现代码

import java.util.HashSet;
import java.util.Objects;
import java.util.Scanner;class Point {long x;long y;public Point(long x, long y) {this.x = x;this.y = y;}@Overridepublic boolean equals(Object obj) {if (this == obj) {return true;} else if (obj == null || getClass() != obj.getClass()) {return false;} else {Point point = (Point) obj;return x == point.x && y == point.y;}}@Overridepublic int hashCode() {return Objects.hash(x, y);}
}public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();long L = in.nextLong();int S = in.nextInt();HashSet<Point> set = new HashSet<>();Point[] points = new Point[n];for (int i = 0; i < n; i ++) {long x = in.nextLong();long y = in.nextLong();points[i] = new Point(x, y);set.add(points[i]);}int[][] map = new int[S + 1][S + 1];for (int i = S; i >= 0; i --) {for (int j = 0; j <= S; j ++) {map[i][j] = in.nextInt();}}int ans = 0;// 依次假设每个点作为藏宝图的起点for (int i = 0; i < n; i++) {// 将起点对应上之后更新藏宝图与大地图对应点的坐标long mapX = points[i].x;long mapY = points[i].y;boolean flag = true;for (int j = 0; j <= S; j ++) {for (int k = 0; k <= S; k ++) {// 如果点没有对应上或者出现越界if ((map[j][k] == 1) != set.contains(new Point(mapX + j, mapY + k))|| mapX + j > L || mapY + k > L) {flag = false;break;}}if (!flag) {break;}}if (flag) {ans ++;}}System.out.println(ans);}
}

这篇关于【CSP:202206-2】寻宝!大冒险!(Java)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1111963

相关文章

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.