PAT乙級——1090(暴力破解,未AC)
阿新 • • 發佈:2018-12-08
題目:危險品裝箱 (25 分)
集裝箱運輸貨物時,我們必須特別小心,不能把不相容的貨物裝在一隻箱子裡。比如氧化劑絕對不能跟易燃液體同箱,否則很容易造成爆炸。
本題給定一張不相容物品的清單,需要你檢查每一張集裝箱貨品清單,判斷它們是否能裝在同一只箱子裡。
輸入格式:
輸入第一行給出兩個正整數: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
題目分析及實現
這個題目我看完就想到了最笨的解決辦法,也很好去實現,此程式碼有些懶得寫,借鑑了下網上的輪子,但是也預感到了結果就是肯定會有超時,這玩意一套好幾個迴圈,我暫時沒有想到解決方案,看了網上C++的一些解決方案,改天試著改一下,若是有人有java版更高效的程式碼,希望可以發給我瞅瞅。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int m=in.nextInt();
String[][] num=new String[n][2];
//成對不相容物品
for (int i = 0 ; i < n ; i++){
num[ i][0]=in.next();
num[i][1]=in.next();
}
//貨物清單
String[][] menu=new String[m][2];
for (int i = 0; i < m ; i++){
menu[i][0]=in.next();
menu[i][1]=in.nextLine();
}
in.close();
//判斷是否存在不相容物品對
for (int j = 0 ; j < m ; j++){
bgn:for (int i = 0 ; i < n ; i++){
int time =menu[j][1].trim().split(" ").length;
String menu1[] =menu[j][1].trim().split(" ");
bgm:for (int k = 0 ; k < time ; k++){
if (num[i][0].equals(menu1[k])){
for (int l = 0 ; l < time ; l++){
if(num[i][1].equals(menu1[l])){
System.out.println("No");
break bgn;
}
}
}else if (i==n-1){
System.out.println("Yes");
break bgn;
}
}
}
}
}
}