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 的月份. 输入描 ...
随机推荐
- LOJ P10130 点的距离 题解
这道题相当于倍增求LCA的板子,我们只要构建一棵树,然后距离就是x的深度+y的深度 - LCA(x,y)的深度: #include<iostream> #include<cstdio ...
- Lightning Web Components 来自salesforce 的web 组件化解决方案
Lightning Web Components 是一个轻量,快速,企业级别的web 组件化解决方案,官方网站也提供了很全的文档 对于我们学习使用还是很方便的,同时我们也可以方便的学习了解salesf ...
- LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力
二次联通门 : LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力 /* LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力 叫做计算几 ...
- linux命令之------Linux文档编辑
1.Vi和vim三种模式 (1)命令模式:移动光标 (2)插入模式:编辑文档 (3)末行模式:保存退出 不同模式操作示意图: 其中wq是保存退出,wq!强制保存退出:q不保存退出:q!强制不保存退出. ...
- 【整理】Xcode中的iOS模拟器(iOS Simulator)的介绍和使用心得
[整理]Xcode中的iOS模拟器(iOS Simulator)的介绍和使用心得 iOS模拟器简介 iOS功能简介 iOS模拟器,是在Mac下面开发程序时,开发iOS平台的程序时候,可以使用的辅助工具 ...
- CNN中各类卷积总结:残差、shuffle、空洞卷积、变形卷积核、可分离卷积等
CNN从2012年的AlexNet发展至今,科学家们发明出各种各样的CNN模型,一个比一个深,一个比一个准确,一个比一个轻量.我下面会对近几年一些具有变革性的工作进行简单盘点,从这些充满革新性的工作中 ...
- mint-ui里面的MessageBox怎么去判断确认还是取消
MessageBox.confirm('', { title: '请注意', message: '添加供应商前,请先搜索该供应商是否存在,请勿重复添加', showCancelButton: true ...
- Spring重定向
1.使用HttpServletResponse的sendRedirect()方法. 示例: @PostMapping("/user/product/id") public void ...
- 浅谈SOA面向服务化编程架构(dubbo)
dubbo 是阿里系的技术.并非淘宝系的技术啦,淘宝系的分布式服务治理框架式HSF啦 ,只闻其声,不能见其物.而dubbo是阿里开源的一个SOA服务治理解决方案,dubbo本身 集成了监控中心,注 ...
- 关于java nio的channel读写的一个困惑
这里提的需求基本都是IM的,IM的解决方案是怎么样的? 网上的需求: 1. 某一用户发了一条信息, 需要服务器反回一个信息(这种最简单) 2. 某一用户发了一条信息,需要服务器广播给所有客户端 3. ...