华为OD题目:快递投放问题

2023-11-11

华为OD题目:快递投放问题

有N个快递站点用字符串标识,某些站点之间有道路连接。每个站点有一些包裹要运输,
每个站点间的包裹不重复,路上有检查站会导致部分货物无法通行,计算哪些货物无法正常投递
输入描述
1、第一行输入M N,M个包裹N个道路信息
2、0<=M.N<=100
3、检查站禁止通行的包裹如果有多个以空格分开
输出描述
输出不能送达的包裹,如:package2 package4如果所有包惠都可以送达则输出: none
输出结果按照升序排列Q
示例1:
4 2
package1 A C
package2 A C
package3 B C
package4 A C
A B package1
A C package2
输出
package2
说明
4个包裹,2个禁止通行信息.
接下来的4行是每个包裹的名称,起点,终点。
最后2行是两个站点之间无法通行的包裹名称

4 2
package1 A C
package2 A C
package3 B C
package4 A C
A B package1
A C package2 package4
输出
package2 package4

解题思路:

  • 用hashmap来放包裹,key是路径,value是包裹set, 因为一条路径会有多个包裹
  • 然后遍历就,将禁止的包裹存放在list里面,排序后输出就可以了
public class My {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        String[] strings = str.split(" ");
        int m = Integer.parseInt(strings[0]);
        int n = Integer.parseInt(strings[1]);

        Map<String, Set<String>> packageMap = new HashMap<>();
        for (int i = 0; i < m; i++) {
            String line = sc.nextLine();
            String[] split = line.split(" ");
            String packInfo = split[0];
            String road = split[1] + split[2];

            Set<String> set = packageMap.getOrDefault(road, new HashSet<>());
            set.add(packInfo);
            packageMap.put(road, set);
        }
        //下面是禁止的信息
        List<String> forbiddenList = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            String line = sc.nextLine();
            String[] split = line.split(" ");
            String forbiddenRoad = split[0] + split[1];
            Set<String> packSet = packageMap.get(forbiddenRoad);
            //如果当前禁止的路段没有要运输的包裹,那么进入下个循环
            if (packSet == null || packSet.size() == 0) {
                continue;
            }
            for (int j = 2; j < split.length; j++) {
                String currForbid = split[j];
                if (packSet.contains(currForbid)) {
                    forbiddenList.add(currForbid);
                }
            }
        }
        forbiddenList.sort(String::compareTo);

        //下面是打印结果
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < forbiddenList.size(); i++) {
            if (i != 0) {
                sb.append(" ");
            }
            sb.append(forbiddenList.get(i));
        }
        System.out.println(sb);

    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

华为OD题目:快递投放问题 的相关文章

随机推荐

  • H5当前页面选项卡切换,滚动顶部【记录】

    CSS样式中传入变量 鑫动了的主页 欢迎各位小伙伴 前端小白的成长之路 一起学习 一起成长 在H5中当前的页面难免会有多个选项卡切换的需求 在切换时 同一页面会记住相同位置 用户体验不是很好 我的需求就是切换选项卡 重回顶部 切记 targ
  • mongodb启动不了:child process failed, exited with error number 48

    问题 启动mongodb的时候 发现起不来 报错 child process failed exited with error number 48然后先去 var log mongo mongod log 查看启动的日志 可能原因 应该是没
  • excel表格上传

    一 员工页面跳转
  • 用户关闭浏览器事件

    一直以来用户非正常退出系统 即 用户按右上角的 X 按纽后 服务器端 session 无法销毁 一直要等到其过期时间到了才销毁 这样通过session进行在线人数统计就无法准确了 我今天试了才发现 其实关闭浏览器事件可以捕捉到的 那么我们就
  • Spring Cloud简介

    一 Spring Cloud简介 SpringCloud是微服务架构中的集成 将一系列优秀的组件进行了整合 基于SpringBoot构建 对熟希spring的程序员来说 表容易上手 通过简单的注解 就可以快速的在应用中配置一下常用模块并构建
  • java正则表达式-案例代码

    转载请注明出处 http blog csdn net droyon article details 8635735 jdk在线api http docs oracle com javase 7 docs api index html 选择j
  • 使用 Element 实现首页

    完成首页 使用 Container 布局容器 结构
  • 背景渐变,多层背景图

    背景渐变 多层背景图 一 线性渐变 linear gradient 二 径向渐变 三 背景大小 一 线性渐变 linear gradient 为了创建一个线性渐变 你必须至少定义两种颜色结点 颜色结点即你想要呈现平稳过渡的颜色 同时 你也可
  • Relying upon circular references is discouraged and they are prohibited by default.循环依赖bug解决

    Relying upon circular references is discouraged and they are prohibited by default 循环依赖bug解决 出现的bug大概意思是 不鼓励依赖循环引用 默认情况下
  • 肌电信号采集电路分析

    最近在开发肌电信号的采集 表面肌电信号是非常微弱的生物信号 正常人体表面肌电信号赋值为0 1 5mV 主要能量频段集中在10 150Hz 电路主要是根据原始信号 设计相应的放大电路 滤波电路 下面直接放原理图说明 一级放大电路 一级放大电路
  • Spring MVC使用注解实现账户注册与登陆

    涉及到的注解 Controller 控制器类 RequestMapping 映射路径 RequestParam 用于将指定的请求参数赋值给方法中的形参 定义域对象 User1 用来接受并封装前台传递的数据 package com wen d
  • Java基础(七)——eclipse、集合(容器)

    集合 1 集合框架 l 所谓的框架就是一个类库的集合 集合框架就是一个用来表示和操作集合的统一的架构 它包含了实现集合的接口和类 l 集合框架中不同的集合类有各自不同的数据结构 所以在使用中要根据应用的性能要求来选择不用的集合类 l 集合类
  • C语言指针初阶

    思维导图 目录 编辑 1 指针与内存 1 1内存中的门牌号 地址 是如何编号的 1 2一个指针的大小 在32位平台上 1 3内存总空间大小 2 指针的使用 2 1指针的构成 2 2指针类型的作用 1 决定指针访问的权限的大小 2 决定指针走
  • 在家带娃有没有什么副业可以做?在家带娃的副业有哪些?

    很多朋友在有了自己的孩子之后 为了给孩子一个良好的成长环境 就会辞去工作专心在家带孩子 不过 考虑生活开销的支出问题 还是会想要做点副业赚钱 那在家带孩子可以做什么副业呢 1 数据录入 这是一个大行业 几乎所有人都可以做 需要的仅仅是一台能
  • Oracle TNS简述

    什么是TNS TNS是Oracle Net的一部分 专门用来管理和配置Oracle数据库和客户端连接的一个工具 在大多数情况下客户端和数据库要通讯 必须配置TNS 当然在少数情况下 不用配置TNS也可以连接Oracle数据库 比如通过JDB
  • java使用xfire创建和调用webservices

    1 创建工程 File gt New gt Web Service Project 弹出Web Service Project窗口 需要填写Project Name 例子是Demo 选择XFire 然后一路next 直到完成 创建完成后 打
  • 如何让Element UI的Message消息提示每次只弹出一个

    Element UI的Message消息提示是点击一次触发一次的 在开发的时候经常会作为一些校验提示 但是公司的测试人员在进行测试时会一直点 然后就会出现如下图的情况 虽然客户使用的时候一般来说不会出现这种情况 毕竟客户不会闲着没事一直点点
  • 用 visio 2013反转图形或镜像图形

    软件版本 visio 2013 选择待反转图形 依次点击 开始 位置 旋转形状 即可根据需求进行图形反转 若需要进行图形镜像操作 可提前将图形复制出一份 将复制出来的图形进行垂直反转或水平反转
  • 2020年tensorflow定制训练模型笔记(3)——开始训练

    现在 我们开始训练文件 这里 我将用一些训练好的模型来做迁移训练 这里简单介绍一下迁移训练 迁移训练就是在别人训练的模型基础上继续训练 这样我们的模型训练就不是从零开始 加快速度以及提高准确率 我讲的比较简单 参考网址在这 https bl
  • 华为OD题目:快递投放问题

    华为OD题目 快递投放问题 有N个快递站点用字符串标识 某些站点之间有道路连接 每个站点有一些包裹要运输 每个站点间的包裹不重复 路上有检查站会导致部分货物无法通行 计算哪些货物无法正常投递 输入描述 1 第一行输入M N M个包裹N个道路