PAT(B) 1090 危险品装箱(Java)
题目描述
集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里。比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸。
本题给定一张不相容物品的清单,需要你检查每一张集装箱货品清单,判断它们是否能装在同一只箱子里。
输入格式
输入第一行给出两个正整数:N (≤104) 是成对的不相容物品的对数;M (≤100) 是集装箱货品清单的单数。
随后数据分两大块给出。第一块有 N 行,每行给出一对不相容的物品。第二块有 M 行,每行给出一箱货物的清单,格式如下:
K G[1] G[2] ... G[K]
其中 K (≤1000) 是物品件数,G[i] 是物品的编号。简单起见,每件物品用一个 5 位数的编号代表。两个数字之间用空格分隔。
输出格式
对每箱货物清单,判断是否可以安全运输。如果没有不相容物品,则在一行中输出 Yes,否则输出 No。
输入样例
6 3
20001 20002
20003 20004
20005 20006
20003 20001
20005 20004
20004 20006
4 00001 20004 00002 20003
5 98823 20002 20003 20006 10010
3 12345 67890 23333
输出样例
No
Yes
Yes
Java 代码
如果最后一组数据超时,多提交几次就行。
/*********************************************************************************
Submit Time Status Score Problem Compiler Run Time User
8/30/2019, 20:32:08 Accepted 25 1090 Java (openjdk) 395 ms wowpH
*********************************************************************************/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Main {
// 1、保存不相容的物品,key是物品,list是与key不相容的物品列表
private Map<String, List<String>> incompatibleItems;
public Main() {
// 2、输入流
Reader in = new InputStreamReader(System.in);
BufferedReader input = new BufferedReader(in);
// 3、获取物品对数和清单数量
String[] arr = nextLine(input);
int logarithmofGoods = Integer.parseInt(arr[0]);
int numberofListings = Integer.parseInt(arr[1]);
// 4、创建一个保存不相容物品的哈希映射
incompatibleItems = new HashMap<String, List<String>>();
// 5、输入所有不相容物品,生成不相容物品映射incompatibleItems
for (int i = 0; i < logarithmofGoods; ++i) {
arr = nextLine(input);
addIncompatibleItems(arr[0], arr[1]);
addIncompatibleItems(arr[1], arr[0]);
}
// 7、输入所有清单,检查它是否安全,并输出结果
for (int i = 0; i < numberofListings; ++i) {
arr = nextLine(input);
arr = Arrays.copyOfRange(arr, 1, arr.length);// 1.去掉数组的第一个元素
Arrays.sort(arr);// 2.将清单物品按照编号排序
// 3.检查并输出是否安全
if (checkItems(arr)) {
System.out.println("Yes");
} else {
System.out.println("No");
}
}
}
// 4、读取一行字符串,转成字符串数组,返回数组
private String[] nextLine(BufferedReader input) {
String[] arr = new String[0];
try {
arr = input.readLine().split(" ");
} catch (IOException e) {
}
return arr;
}
// 6、将incompatibleItem添加到与item不相容的物品列表
private void addIncompatibleItems( String item,
String incompatibleItem) {
List<String> list;
if (incompatibleItems.containsKey(item)) {// 1.包含物品item
list = incompatibleItems.get(item);// 2.获取item的不相容物品列表
} else {// 3.不包含item
list = new ArrayList<String>();// 4.创建新的列表
}
list.add(incompatibleItem);// 5.将incompatibleItem添加到列表中
incompatibleItems.put(item, list);// 6.保存到映射中
}
// 8、检查清单是否安全
private boolean checkItems(String[] itemList) {
for (String item : itemList) {
if (!incompatibleItems.containsKey(item)) {// 1.当前物品无不相容物品
continue;// 2.跳过,检查清单的下一个物品
}
// 3.获取与item不相容的物品列表
List<String> list = incompatibleItems.get(item);
// 4.检查与item不相容的所有物品是否在清单中
for (String inItem : list) {
int index = Arrays.binarySearch(itemList, inItem);
if (index >= 0) {// 5.当前不相容的物品在清单中
return false;// 6.返回不安全
}
}
}
return true;// 7.安全
}
public static void main(String[] args) {
new Main();
}
}
提交结果

PAT(B) 1090 危险品装箱(Java)的更多相关文章
- PAT乙级:1090危险品装箱(25分)
PAT乙级:1090危险品装箱(25分) 题干 集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题给定一张不相容物品的清 ...
- PAT 乙级 1089 狼人杀 && 1090 危险品装箱 (我的时间最短哦)
1 1089的点在注释里面,核心就是遍历任意两个人说谎,看结果是否满足题目要求 2 1090 是一道好题目, 考虑到了时间复杂度 通常想法是看清单中每一个物品 是否存在与其不能存放的物品 那么复杂 ...
- PAT 1090 危险品装箱
https://pintia.cn/problem-sets/994805260223102976/problems/1038429484026175488 集装箱运输货物时,我们必须特别小心,不能把 ...
- 1090 危险品装箱 (25分)C语言
集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题给定一张不相容物品的清单,需要你检查每一张集装箱货品清单,判断它们是否 ...
- P1090 危险品装箱
1090 危险品装箱 (25分) 集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题给定一张不相容物品的清单,需要你 ...
- PAT1090 危险品装箱 (25分) ——值得留意的map用法(int型与vector型的关联)
1090 危险品装箱 (25分) 集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题给定一张不相容物品的清单,需要你 ...
- PAT(B) 1020 月饼(Java)
题目链接:1020 月饼 (25 point(s)) 分析 将月饼(库存量,总售价,单价)封装成MoonCake类 Scanner会超时,用BufferedReader类读取数据 读取的时候用字符串数 ...
- PAT基础级-钻石段位样卷2-7-7 危险品装箱 (25 分)
集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题给定一张不相容物品的清单,需要你检查每一张集装箱货品清单,判断它们是否 ...
- PAT——不吉利的日期(java中date和Calendar使用)
题目描述 在国外,每月的 13 号和每周的星期 5 都是不吉利的.特别是当 13 号那天恰好是星期 5时,更不吉利. 现在给你一个年份,请你从小到大依次输出当年所有13 号是星期 5 的月份. 输入描 ...
随机推荐
- OKR的两个基本原则
<启示录>作者,前易贝高级副总裁,硅谷产品集团创始人马蒂·卡根在<OKR工作法>的序言中提到了目标管理法的两个原则: 不要告诉下属具体怎么做,要告诉他们你要什么,他们就会给你满 ...
- .NET体系结构
主要内容包括: C#与.NET的关系.公共语言运行库.中间语言.程序集..NET Framework类.名称空间.内层管理... C#与.NET的关系 C#是门高级编程语言,.NET(Framewor ...
- Omnibus 安装
使用gem gem install omnibus 说明 可能需要配置gem source ,通过 gem source list 可以进行检查 参考如下: gem source -r https ...
- 新版本Mariadb安装后相关问题的解决
给新机器Ubuntu安装的Mariadb后无法登录,通过网上各种方法修改root用户密码,仍然无法解决,耗费几个小时! 经过看日志和查手册,发现原因如下: ubuntu确实安装没有启用root用户,所 ...
- SSM框架中,ContextLoaderListener与RequestContextListener的联系与区别
在整合SSM框架时,我们要在web.xml文件中对spring进行相关配置. 首先要配置一个<context-param></context-param> <!--加载s ...
- 如何使用git把本地代码上传(更新)到github上
最近用到git和github记录一下 1.下载git并安装 到官网下载并安装就行了 *如果下载失败,或者太慢,可以复制链接到迅雷下载 2.上传 1.在github新建存储库 库名不能是中文 2.在需要 ...
- elementui 走马灯图片自适应
点击单元格后弹出对话框轮播图片,用Carousel 走马灯实现. 希望图片无论分辨率多少,都能在一屏内显示,这时就要用图片自适应. 图片外层容器,使用 flex 布局,设置对齐方式为主轴.交叉轴居中 ...
- tomcat启动控制台中文乱码问题解决方法
tomcat启动控制台中文乱码问题解决方法,修改tomcat安装路径/conf/logging.properties文件 java.util.logging.ConsoleHandler.encodi ...
- Python 开发版本指导与资源
Python 文档:https://docs.python.org/3/ 下载 下载这些文件 文档版本 Python 3.9(开发中) Python 3.8(稳定) Python 3.7(稳定) Py ...
- git - gitHub生成Markdown目录
就是github-markdown-toc.go. github-markdown-toc.go Github地址 如果你有GO语言(又是你)的编译环境,可以尝试自己编译,如果没有,可以直接下载编译好 ...