1. 程式人生 > >PAT乙級——1090(暴力破解,未AC)

PAT乙級——1090(暴力破解,未AC)

題目:危險品裝箱 (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; } } } } } }

在這裡插入圖片描述