【2024最新华为OD-C/D卷试题汇总】[支持在线评测] K小姐和A先生的聚餐计划(200分) - 三语言AC题解(Python/Java/Cpp)

news2024/12/24 0:20:03

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解

💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导

👏 感谢大家的订阅➕ 和 喜欢💗

📎在线评测链接

K小姐和A先生的聚餐计划(200分)

🌍 评测功能需要 订阅专栏 后私信联系清隆解锁~

🍓OJ题目截图

在这里插入图片描述

文章目录

    • 📎在线评测链接
    • 🍓OJ题目截图
    • ✈️ K小姐和A先生的聚餐计划
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码

✈️ K小姐和A先生的聚餐计划

问题描述

K小姐和A先生是很要好的朋友。他们约定周末一起吃饭,通过手机在地图上选择了多个聚餐地点。但由于一些障碍物的存在,部分聚餐地点可能无法到达。现在给定一张地图,请你帮助他们找出有多少个聚餐地点是两人都能到达的。

输入格式

第一行包含两个正整数 m m m n n n,表示地图的长度和宽度。( 4 ≤ m , n ≤ 100 4 \le m,n \le 100 4m,n100)

接下来的 m m m 行,每行包含 n n n 个整数,表示地图的具体信息。其中:

  • 0 0 0 表示通畅的道路
  • 1 1 1 表示障碍物(地图上只有 1 1 1 表示障碍)
  • 2 2 2 表示K小姐或A先生的初始位置,地图中有且仅有 2 2 2 2 2 2
  • 3 3 3 表示两人选择的聚餐地点,保证不是障碍并且数量在 1 1 1 100 100 100 之间

输出格式

一个整数,表示两人都能到达的聚餐地点的数量。

样例输入

4 4
2 1 0 3
0 1 2 1
0 3 0 0
0 0 0 0

样例输出

2

样例输入

4 4 
2 1 2 3
0 1 0 0
0 1 0 0 
0 1 0 0

样例输出

0

数据范围

  • 4 ≤ m , n ≤ 100 4 \le m,n \le 100 4m,n100
  • 聚餐地点数量在 1 1 1 100 100 100 之间
  • 障碍物在地图上用 1 1 1 表示,非障碍物不会是 1 1 1
  • 保证有且仅有 2 2 2 个初始位置

题解

本题可以用 BFS 来解决。我们分别从K小姐和A先生的位置开始进行 BFS 遍历,对于每个遍历到的聚餐地点,将其记录在一个哈希表中,哈希表的键为聚餐地点的坐标,值为能到达该地点的人数。

遍历结束后,我们再遍历哈希表,统计所有值为 2 2 2 的键的数量,即为两人都能到达的聚餐地点数量。

时间复杂度 O ( m n ) O(mn) O(mn),空间复杂度 O ( m n ) O(mn) O(mn)

参考代码

  • Python
n, m = map(int, input().split())
grid = [list(map(int, input().split())) for _ in range(n)]

dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
res = {}

def bfs(x, y, vis):
    queue = [(x, y)]
    vis[x][y] = 1
    while queue:
        x, y = queue.pop(0)
        if grid[x][y] == 3:
            res[(x, y)] = res.get((x, y), 0) + 1
        for i in range(4):
            nx, ny = x + dx[i], y + dy[i]
            if 0 <= nx < n and 0 <= ny < m and vis[nx][ny] == 0 and grid[nx][ny] != 1:
                queue.append((nx, ny))
                vis[nx][ny] = 1

for i in range(n):
    for j in range(m):
        if grid[i][j] == 2:
            bfs(i, j, [[0] * m for _ in range(n)])

ans = sum(1 for v in res.values() if v > 1)
print(ans)
  • Java
import java.util.*;

public class Main {
    static int n, m;
    static int[][] grid;
    static int[] dx = {0, 0, 1, -1};
    static int[] dy = {1, -1, 0, 0};
    static Map<String, Integer> res = new HashMap<>();

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        m = sc.nextInt();
        grid = new int[n][m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                grid[i][j] = sc.nextInt();
            }
        }
        
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (grid[i][j] == 2) {
                    bfs(i, j, new int[n][m]);
                }
            }
        }

        int ans = 0;
        for (int v : res.values()) {
            if (v > 1) ans++;
        }
        System.out.println(ans);
    }

    static void bfs(int x, int y, int[][] vis) {
        Queue<int[]> queue = new LinkedList<>();
        queue.offer(new int[]{x, y});
        vis[x][y] = 1;
        
        while (!queue.isEmpty()) {
            int[] curr = queue.poll();
            x = curr[0]; y = curr[1];
            if (grid[x][y] == 3) {
                String key = x + "," + y;
                res.put(key, res.getOrDefault(key, 0) + 1);
            }
            for (int i = 0; i < 4; i++) {
                int nx = x + dx[i], ny = y + dy[i];
                if (0 <= nx && nx < n && 0 <= ny && ny < m 
                        && vis[nx][ny] == 0 && grid[nx][ny] != 1) {
                    queue.offer(new int[]{nx, ny});
                    vis[nx][ny] = 1;
                }
            }
        }
    }
}
  • Cpp
#include <iostream>
#include <queue>
#include <unordered_map>
#include <vector>
using namespace std;

const int maxn = 110;
int n, m;
int grid[maxn][maxn];
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
unordered_map<string, int> res;

void bfs(int x, int y, vector<vector<int>>& vis) {
    queue<pair<int, int>> q;
    q.push({x, y});
    vis[x][y] = 1;
    
    while (!q.empty()) {
        auto [x, y] = q.front(); q.pop();
        if (grid[x][y] == 3) {
            res[to_string(x) + "," + to_string(y)]++;
        }
        for (int i = 0; i < 4; i++) {
            int nx = x + dx[i], ny = y + dy[i];
            if (nx >= 0 && nx < n && ny >= 0 && ny < m 
                    && !vis[nx][ny] && grid[nx][ny] != 1) {
                q.push({nx, ny});
                vis[nx][ny] = 1;
            }
        }
    }
}

int main() {
    cin >> n >> m;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> grid[i][j];
        }
    }
    
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (grid[i][j] == 2) {
                vector<vector<int>> vis(n, vector<int>(m));
                bfs(i, j, vis);
            }
        }
    }
    
    int ans = 0;
    for (auto [_, cnt] : res) {
        if (cnt > 1) ans++;
    }
    cout << ans << endl;
    
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1832172.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[自动驾驶 SoC]-4 特斯拉FSD

FSD, 参考资料来源FSD Chip - Tesla - WikiChip 另外可参考笔者之前分享文章&#xff1a;[自动驾驶技术]-6 Tesla自动驾驶方案之硬件&#xff08;AI Day 2021&#xff09;&#xff0c;​​​​​​​[自动驾驶技术]-8 Tesla自动驾驶方案之硬件&#xff08;AI Day 2022&#xf…

短信群发平台众多,如何挑选一家靠谱的合作伙伴?

随着通信技术的不断发展和智能手机的普及&#xff0c;短信群发平台在企业营销、客户通知、活动推广等领域的应用越来越广泛。然而&#xff0c;市场上的短信群发平台琳琅满目&#xff0c;如何从中挑选出一家靠谱、高效、安全的合作伙伴&#xff0c;成为了许多企业和个人关注的焦…

Matlab r2023a v23.2.0 解锁版安装步骤 (工程计算商业数学软件)

前言 Matlab&#xff08;矩阵实验室&#xff09;是全球领先的数学计算软件开发商美国 MathWorks 公司研发的一款面向科学与工程计算的高级语言的商业数学软件&#xff0c;集算法开发、数据分析、可视化和数值计算于一体的编程环境&#xff0c;其核心是仿真交互式矩阵计算&…

管理员如何踢掉登录用户?

这是 Spring Security 学习小组有小伙伴提的一个问题&#xff1a; 感觉这个问题还有点意思&#xff0c;拿出来和各位小伙伴一起分享下。 一 问题分析 首先大家注意限制条件&#xff1a;常规 Session 方案。 如果不是这几个字&#xff0c;这个问题根本就不是问题&#xff0c;…

Python基础用法 之 输入 与 输出

1.输入 &#xff08;1&#xff09;什么是输入&#xff1f; 输入&#xff1a;获取键盘的输入信息。 &#xff08;2&#xff09;语法 变量 input(给使⽤者的提示信息,即告诉别⼈输入什么内容) &#xff08;3&#xff09;注意事项 代码从上到下执⾏, 当代码执⾏遇到 input 的时候…

【C++高阶】掌握C++多态:探索代码的动态之美

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;C继承 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀继承 &#x1f4d2;1. 多态的定义及实现&…

个人学习算法总结的基础crud与算法思想数据结构解释

建议都从简单的crud入手,结合生活理解了结构与操作在去进阶更难的东西,做事有规划有步骤有时间限制这样比较好进步 跳转阅读

进化生物学的数学原理 知识点总结

1、进化论与自然选择 1.1 进化论 1、进化论 过度繁殖 -> 生存竞争 -> 遗传和变异 -> 适者生存 2、用进废退学说与自然选择理论 用进废退&#xff1a;一步适应&#xff1a;变异 适应 自然选择&#xff1a;两步适应&#xff1a;变异 选择 适应 3、木村资生的中性…

Mysql开启查询日志(General Log)

1、增加配置&#xff1a; /etc/my.cnf [mysqld] general_log1 general_log_file/var/log/mysql/query.log 2、增加目录和文件&#xff0c;并且授权 可以使用以下命令修改权限&#xff1a; 创建目录&#xff1a;sudo mkdir -p /var/log/mysql 更改目录所有者&#xff1a;sudo…

[环境配置]vscode通过ssh连接autodl进行项目开发

警告&#xff1a;如果使用VSCode直接执行或开终端执行训练程序&#xff0c;请在调试完成后最后通过screen/tmux工具开守护进程&#xff0c;确保程序不受SSH连接中断影响程序执行&#xff01; 官方文档&#xff1a;请戳 AutoDL使用方法&#xff1a; 在进行操作前您需要提前安装…

【日常记录】【插件】prisma 链接MySQL数据库 简单入门

文章目录 1、新建项目&#xff0c;使用prisma链接数据库1.1、先创建一个项目1.2、初始化 npm 配置文件及下载依赖1.3、初始化TS配置文件1.4、初始化 prisma1.5、更改 prisma/schema.prisma1.6 更改.env 文件1.7 编写 prisma/schema.prisma1.8 将编写的 prisma/schema.prisma 映…

实时数仓Hologres V2.2发布,Serverless Computing降本20%

Highlight 新发布Serverless Computing&#xff0c;提升大任务稳定性&#xff0c;同时可降低20%计算成本 引擎性能优化&#xff0c;TPC-H 1TB测试相对V1.X 提升100% 实时湖仓加速架构升级&#xff0c;支持Paimon&#xff0c;直读ORC、Parquet数据性能提升5倍以上 新增实例监…

如何安全进行亚马逊、沃尔玛测评?

在亚马逊、沃尔玛、速卖通、阿里国际站等电商平台上&#xff0c;测评已成为一种高效的推广手段&#xff0c;但伴随的风险也不容忽视。这些风险主要源于平台严格的大数据风控机制&#xff0c;它涵盖了多个方面&#xff0c;以确保评价的真实性和合规性。 首先&#xff0c;硬件参数…

解决 uniapp h5 页面在私有企微iOS平台 间歇性调用uni api不成功问题(uni.previewImage为例)。

demo <template><view class"content"><image class"logo" src"/static/logo.png"></image><button click"previewImage">预览图片</button></view> </template><script> //打…

数据可视化实验一:Panda数据处理及matplotlib绘图初步

目录​​​​​​​ 2024-6-17 一、请将所有含有发明家“吴峰”的发明专利的“申请日”打印出来。并将含有“吴峰”的所有发明专利条目保存到Excel中 1.1 代码实现 1.2 运行结果 二、读取文件创建城市、人口、性别比、城镇化率DataFrame对象&#xff0c;计算指标排名&…

AI写代码,CS还有前途吗?加州大学伯克利分校:CDSS申请人数激增48%!

目录 01 CS入学人数暴涨 02 人类Coder可堪大任 03 AI还没有学会创新 04 编程与农耕不同 AI写了这么多代码&#xff0c;你还应该学习计算机科学吗&#xff1f; 新的数据显示&#xff0c;学生们仍然热衷于选修计算机科学&#xff1a;加州大学伯克利分校&#xff08;UCB&#…

AI大模型应用(1)OpenAi API快速入门

AI大模型应用(1)OpenAi API快速入门 2022 年 11 月&#xff0c;ChatGPT 成功面世&#xff0c;成为历史上用户增长最快的消费者应用。与 Google、FaceBook等公司不同&#xff0c;OpenAI 从初代模型 GPT-1 开始&#xff0c;始终贯彻只有解码器&#xff08;Decoder-only&#xff…

动力学笔记01——共振频率和共振带的数学定义

文章目录 0、背景描述1、正文2. 位移、速度、加速度的共振频率并不相同 0、背景描述 过去一年&#xff0c;我基本都在考虑塔架&#xff08;尤其是混塔&#xff09;频率仿真/模态分析的问题。关于这个问题&#xff0c;不仅有地基刚度&#xff0c;还有塔筒本身以及其他影响频率的…

散户必须知道!个股场外期权期限是什么?

今天带你了解散户必须知道&#xff01;个股场外期权期限是什么&#xff1f;场外个股期权是一种交易双方买卖未来某个时间以某个价格购买或卖出某种资产的权力&#xff0c;允许投资者以相对较小的期权费用获得名义本金&#xff0c;以获取更高的回报。 个股场外期权期限是什么&am…

【免费Web系列】大家好 ,今天是Web课程的第二二天点赞收藏关注,持续更新作品 !

这是Web第一天的课程大家可以传送过去学习 http://t.csdnimg.cn/K547r 员工管理 1. 修改员工 对于修改功能&#xff0c;分为两步实现&#xff1a; 点击 “编辑” 根据ID查询员工的信息&#xff0c;回显展示。 点击 “保存” 按钮&#xff0c;修改员工的信息 。 1.1 回显…