Java 1090 危险品装箱
题目内容:
集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里。比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸。
本题给定一张不相容物品的清单,需要你检查每一张集装箱货品清单,判断它们是否能装在同一只箱子里。
输入格式:
输入第一行给出两个正整数: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代码实现(未AC,最后2个测试点超时):
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、输入所有不相容物品,生成不相容物品映射incompatibleItemsfor (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.包含物品itemlist = incompatibleItems.get(item);// 2.获取item的不相容物品列表} else {// 3.不包含itemlist = 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();}
}
C++代码实现(AC):
#include<iostream>
#include<vector>
#include<map>
using namespace std;
int main(){int n,k,t1,t2;cin>>n>>k;map<int, vector<int>> m;for(int i=0;i<n;i++){cin>>t1>>t2;m[t1].push_back(t2);m[t2].push_back(t1);}while(k--){int cnt,flag=0,a[100000]={0};cin>>cnt;vector<int> v(cnt);for(int i=0;i<cnt;i++){cin>>v[i];a[v[i]]=1;}for(int i=0;i<v.size();i++){for(int j=0;j <m[v[i]].size();j++){if(a[m[v[i]][j]]==1) flag=1;}}printf("%s\n",flag?"No":"Yes");}return 0;
}
Java 1090 危险品装箱相关推荐
- C++学习之路 | PTA乙级——1090 危险品装箱 (25 分)(精简)
1090 危险品装箱 (25 分) 集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题给定一张不相容物品的清单,需要你检 ...
- PAT(乙级)1090.危险品装箱(25)
PAT 1090.危险品装箱(25) 集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题给定一张不相容物品的清单,需要你 ...
- 【简便解法】1090 危险品装箱 (25分)_33行代码AC
立志用最少的代码做最高效的表达 PAT乙级最优题解-->传送门 集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题 ...
- 1090 危险品装箱 (25分)
集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题给定一张不相容物品的清单,需要你检查每一张集装箱货品清单,判断它们是否 ...
- PAT 1090 危险品装箱(25 分)- 乙级
集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题给定一张不相容物品的清单,需要你检查每一张集装箱货品清单,判断它们是否 ...
- 1090 危险品装箱 (25 分) mapp
同一物品多对不相容,数组a直接寻找这批货物中是否有任一k物品的全部不相容物品j++(逐个检查),a[k][j]==1?以空间换时间,也可以用hash表 #include <iostream> ...
- 【PAT乙级】1090 危险品装箱 (25 分)
题目地址 #include<cstdio> #include<iostream> #include<algorithm> #include<map> # ...
- 1090 危险品装箱 (25 分)
解题思路: 首先我想到的是用一个足够大的动态二维数组来记录不相容的物品,行号代表该物品的编号,该列中存储与该物品不相容的其它物品 然后定义一个足够大的数组dir[100000],数组下标表示该物品的编 ...
- java的自动装箱和拆箱,Java中的自动装箱和拆箱是什么?
当我们用任何语言编写程序时,大多数时候我们使用原始数据类型,.但是,在面向对象编程领域,有些情况下原始数据类型会出现不足,而Java就是其中之一.为了克服原始数据类型的缺点,我们 当我们用任何语言编写 ...
最新文章
- ELK 处理 Spring Boot 日志,有点强悍!
- mysql 主从相关
- fork source exec区别差异
- Resharper进阶一
- Python selenium chrome 环境配置
- 查看ELK集群的状态命令
- Linux服务器创建及维护记录
- ubuntu linux设置网关,ubuntu修改静态IP网关
- stn算子_C++学习(七)入门篇——C++算数运算符
- 在线工具:找到神器,助你轻松应对各种职场难题
- linux音频设备id,ubuntu下提取DSDT SSDT和声卡ID _ 黑苹果乐园
- protobuf如何使用Protogen工具生成CS代码详细教学篇
- freeradius在AP控制器设备中test-aaa 显示timeout的解决方案
- 分块详解(优雅的暴力)
- iPad Pro如何当外置显示器(win、mac)
- 批量将多个文件夹整理合并到一个文件夹中
- (加快设计)推荐一个SketchUp的3D模型库
- 滴水三期:day16.2-结构体数组赋值
- 0208中年发福,需要更加注意保持身材
- su - oracle和su oracle 的区别