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 P10004 智力大冲浪 题解
每日一题 day37 打卡 Analysis 经典的带限期和罚款的单位时间任务调度问题 将 val 从大到小排序,优先处理罚款多的,将任务尽量安排在期限之前,并且靠后,如果找不到,则放在最后面 #in ...
- 查看.NET应用程序中的异常(下)
为什么要使用内存转储进行调试? 在两种主要情况下,您可能需要使用内存转储进行调试.第一种情况是应用程序有一个未处理的异常并崩溃,而您只有一个内存转储.第二种情况是,在生产环境中出现异常或特定行为,并且 ...
- 异步编程(回调函数,promise)
一.回调函数 ①概念:一般情况下,程序会时常通过API调用库里所预先备好的函数.但是有些库函数却要求应用先传给它一个函数,好在合适的时候调用,以完成目标任务.这个被传入的.后又被调用的函数就称为回调函 ...
- Switch ……case语句
Switch(变量){ case 1: 如果变量和1的值相同,执行该处代码 break; case 2: 如果变量和2的值相同,执行该处代码 break; case 3: 如果变量和3的值相同,执行该 ...
- 微信小程序class封装http
config.js var config = { base_api_url:"https://douban.uieee.com/v2/" } export {config} uti ...
- C语言博客作业—2019-指针
0.展示PTA总分 1.本章学习总结 1.1学习内容总结 指针做循环变量:即将指针作为循环变量,在指针移动到某一个位置的时候,达到了循环结束的条件,循环结束. for (p = a; p <= ...
- [USACO5.1]二维凸包模板
传送门 Description 求\(n\)个点凸包的周长 Solution 计算几何打暴力必备 Code #include<bits/stdc++.h> #define reg re ...
- Koa 操作 Mongodb 数据库
node-mongodb-native的介绍 使用基于官方的 node-mongodb-native 驱动,封装一个更小.更快.更灵活的 DB 模块, 让我们用 nodejs 操作 Mongodb 数 ...
- lnmp环境脚本快速搭建
进入lnmp官网 https://lnmp.org/download.html 如图: 进入Linux服务器并执行wget命令下载 wget http://soft.vpser.net/lnmp/ln ...
- 《The Boost C++ Libraries》 第一章 智能指针
Boost.SmartPointers中提供了多种智能指针,它们采用在智能指针析构时释放内存的方式,帮助管理动态分配的对象.由于析构函数在智能指针生命周期结束时被执行,所以由它管理的动态分配对象可以保 ...