L3-037 夺宝大赛 - java

devtools/2024/9/22 20:20:35/

L3-037 夺宝大赛


Java (javac)
时间限制
800 ms
内存限制
256 MB
其他编译器
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB


题目描述:

夺宝大赛的地图是一个由 n × m n \times m n×m 个方格子组成的长方形,主办方在地图上标明了所有障碍、以及大本营宝藏的位置。参赛的队伍一开始被随机投放在地图的各个方格里,同时开始向大本营进发。所有参赛队从一个方格移动到另一个无障碍的相邻方格(“相邻”是指两个方格有一条公共边)所花的时间都是 1 个单位时间。但当有多支队伍同时进入大本营时,必将发生火拼,造成参与火拼的所有队伍无法继续比赛。大赛规定:最先到达大本营并能活着夺宝的队伍获得胜利。
假设所有队伍都将以最快速度冲向大本营,请你判断哪个队伍将获得最后的胜利。

输入格式:
输入首先在第一行给出两个正整数 m m m n n n ( 2 < m , n ≤ 100 ) (2 < m, n \le 100) 2<m,n100,随后 m m m 行,每行给出 n n n 个数字,表示地图上对应方格的状态: 1 1 1 表示方格可通过; 0 0 0 表示该方格有障碍物,不可通行; 2 2 2 表示该方格是大本营。题目保证只有 1 1 1 个大本营。
接下来是参赛队伍信息。首先在一行中给出正整数 k ( 0 < k < m × n / 2 ) k(0 < k < m \times n / 2) k0<k<m×n/2,随后 k k k 行,第 i ( 1 ≤ i ≤ k ) i(1 \le i \le k) i1ik行给出编号为 i i i 的参赛队的初始落脚点的坐标,格式为 x y。这里规定地图左上角坐标为 1 1,右下角坐标为 n m,其中 n 为列数,m 为行数。注意参赛队只能在地图范围内移动,不得走出地图。题目保证没有参赛队一开始就落在有障碍的方格里。

输出格式:
在一行中输出获胜的队伍编号和其到达大本营所用的单位时间数量,数字间以 1 个空格分隔,行首尾不得有多余空格。若没有队伍能获胜,则在一行中输出 No winner.

输入样例 1:
5 7
1 1 1 1 1 0 1
1 1 1 1 1 0 0
1 1 0 2 1 1 1
1 1 0 0 1 1 1
1 1 1 1 1 1 1
7
1 5
7 1
1 1
5 5
3 1
3 5
1 4
输出样例 1:
7 6
样例 1 说明:
七支队伍到达大本营的时间顺次为:7、不可能、5、3、3、5、6,其中队伍 4 和 5 火拼了,队伍 3 和 6 火拼了,队伍 7 比队伍 1 早到,所以获胜。

输入样例 2:
5 7
1 1 1 1 1 0 1
1 1 1 1 1 0 0
1 1 0 2 1 1 1
1 1 0 0 1 1 1
1 1 1 1 1 1 1
7
7 5
1 3
7 1
1 1
5 5
3 1
3 5
输出样例 2:
No winner.


给定一张地图,在给定k个队伍,问第一个到达大本营且没有冲突的队伍是哪队。输出队伍编号以及到达时间。如果都冲突,输出No winner.


emmmmmmm

先求从大本营开始到达每个点的步数是多少?

然后使用数组,存储每个步数上的队伍编号是多少。

  • 如果当前位置值为0,那么表示当前步数没有队伍;
  • 如果当前位置值为-1,那么表示当前步数有多个队伍同时到达,会产生冲突。
  • 否则就表示,当前步数队伍到达的编号

java">import java.io.*;
import java.util.*;public class Main
{static int dxy[][] ={{ -1, 0 },{ 0, 1 },{ 1, 0 },{ 0, -1 } };static int N = (int) 1e2 + 10;static int map[][] = new int[N][N]; // 存储地图static int d[][] = new int[N][N]; // 存储从大本营到每个点的步数static int res[] = new int[N * N]; // 存储步数的编号static int n, m;// 判断当前位置是否在地图中static boolean check(int x, int y){return (1 <= x && x <= n) && (1 <= y && y <= m);}static void bfs(int startX, int startY){LinkedList<edge> li = new LinkedList<edge>();li.add(new edge(startX, startY));while (li.size() > 0){edge t = li.poll();int x = t.x;int y = t.y;for (int i = 0; i < 4; i++){int dx = x + dxy[i][0];int dy = y + dxy[i][1];// 如果当前点在地图上,以及当前点可以走,以及当前点没有走过if (check(dx, dy) && map[dx][dy] != 0 && d[dx][dy] == 0){d[dx][dy] = d[x][y] + 1; // 更新步数li.add(new edge(dx, dy));}}}}public static void main(String[] args){n = sc.nextInt();m = sc.nextInt();int x = 0, y = 0;for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){map[i][j] = sc.nextInt();// 当前点是大本营if (map[i][j] == 2){x = i;y = j;}}}bfs(x, y); // 计算从大本营开始,到达每个点的步数是多少int k = sc.nextInt();for (int i = 1; i <= k; i++){// 注意先输入列,在输入行y = sc.nextInt();x = sc.nextInt();int t = d[x][y]; // 大本营达到当前点的步数// 如果当前大本营能走到if (t > 0){// 如果当前步数没走过if (res[t] == 0) res[t] = i; // 当前步数的编号设为i// 如果当前点走过else res[t] = -1; // 那么当前步数就会产生冲突}}boolean f = true; // 是否有队伍没有获胜for (int i = 1; i <= n * m; i++){// 如果当前步数的编号存在,则当前队伍获胜if (res[i] > 0){out.println(res[i] + " " + i);f = false;break;}}// 没有队伍获胜,则输出No winner.if (f) out.println("No winner.");out.flush();out.close();}static class edge{int x, y;public edge(int x, int y){this.x = x;this.y = y;}}static Scanner sc = new Scanner(System.in);static PrintWriter out = new PrintWriter(System.out);}

LinkedList

bfs
bfs


如果有说错的 或者 不懂的 尽管提 嘻嘻

一起进步!!!


闪现


http://www.ppmy.cn/devtools/42137.html

相关文章

构建智能化不动产管理系统:数字化引领未来房地产行业发展

随着城市化进程的不断推进和房地产市场的持续发展&#xff0c;不动产管理系统的重要性日益凸显。在这一背景下&#xff0c;构建智能化不动产管理系统成为推动房地产行业数字化转型的关键举措。本文将深入探讨智能化不动产管理系统的构建与优势&#xff0c;助力房地产企业把握数…

[CAM_REQ_MGR_EVENT_MAX]高通6225平台相机老化异常重启

报错log 相机老化出现20/7万比例的老化异常重启&#xff0c;具体报错log入下 <4>[ 167.506585] [1970:01:02 18:52:26](0) [0:swapper/0]cam_v4l2_event_queue_notify_error: 251 callbacks suppressed 7 3339<6>[ 167.506602] [1970:01:02 18:52:26](0) [0:swap…

Java环境搭建(二)Notepad++和IDEA的下载

Notepad&#xff08;不推荐使用&#xff09; 高级记事本 下载地址 Notepad (juxinwk1.cn) 下载安装后一直下一步就可以了 注&#xff1a;改一下路径还有建立快捷方式&#xff08;自己选择&#xff09; IDEA 集成环境 下载地址 IntelliJ IDEA – the Leading Java and Kotl…

六种恢复已删除PDF文件的方法及实用方法全解析

在数字化时代PDF文件已成为我们日常工作中不可或缺的一部分。有时我们可能会因误操作或系统故障而不小心删除Excel、Word或PPT文档&#xff0c;特别是重要的PDF文件。此时如何高效地恢复这些文件就显得尤为重要。今天将为大家介绍六种恢复已删除PDF文件恢复方法&#xff0c;继续…

从电话到全渠道:呼叫中心软件如何重塑客户服务生态

一.引言 在数字时代&#xff0c;客户服务已不再是简单的电话接听与问题解答。随着消费者期望的提升和科技的飞速发展&#xff0c;客户服务已成为企业品牌建设与维护客户忠诚度的关键战场。从早期的电话客服中心到如今的全渠道服务生态系统&#xff0c;呼叫中心软件作为这一转变…

谷歌举办Gemini API开发者大赛;ChatGPT iOS版更新支持中文

&#x1f989; AI新闻 &#x1f680; 谷歌举办Gemini API开发者大赛&#xff0c;大奖1981款电动DeLorean 摘要&#xff1a;IT之家 5 月 15 日消息&#xff0c;在 2024 年谷歌 I/O 开发者大会上&#xff0c;谷歌宣布举办 Gemini API 开发者大赛&#xff0c;主要面向个人开发者…

Java-String

String 特点&#xff1a; 效果上相当于字符数组&#xff08;char[]&#xff09;&#xff0c;实际上底层原理是字节数组&#xff08;byte[]&#xff09; 构造方法 不同构造方法特点 使用""方法创建的对象实际指向的是同一个内存地址使用new创建的对象即时字符换内…

docker安装minio附带图片

1.拉镜像 docker pull minio/minio 2.创建挂载点目录 mkdir -p /usr/local/minio/config mkdir -p /usr/local/minio/data 3.创建minio容器 docker run \ -p 19000:9000 \ -p 9090:9090 \ --nethost \ --name minio \ -d --restartalways \ -e "MINIO_ACCESS_KEYmini…