2006程式設計競賽第五題

題目:

序位問題有一個 n 個平面上點的集合 S = {P1,P2 ..,Pn}。假設用(xi, yi)表示點 Pi的座標。如
果 xi> xj且 yi > y,我們說點 j Pi控制(dominate)點 Pj。序位問題是要求出每個 S 中的點在 S
中能控制的點之個數。請寫一程式決定輸入點中的每點的能控制的點數。
輸入格式:
< P1 的座標>
< P2 的座標>
...
< Pn 的座標>
輸出格式:
< P1 在 S 中能控制的點之個數>
< P2 在 S 中能控制的點之個數>
...
< Pn 在 S 中能控制的點之個數>

程式碼:

/*
序位問題
有一個 n 個平面上點的集合 S = {P1,
P2 ..,Pn}。假設用(xi, yi)表示點 Pi的座標。如
果 xi> xj且 yi > y,我們說點 j Pi控制(dominate)
點 Pj。序位問題是要求出每個 S 中的點在 S
中能控制的點之個數。請寫一程式決定輸入
點中的每點的能控制的點數。

輸入格式:
< P1 的座標>
< P2 的座標>
... 
< Pn 的座標>
輸出格式:
 < P1 在 S 中能控制的點之個數>
< P2 在 S 中能控制的點之個數>
...
< Pn 在 S 中能控制的點之個數> 
*/
import java.util.*;
public class E2006_5{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        /* 將 HashMap 存放置 ArrayList 容器 */
        ArrayList> list = new ArrayList<>();
        while(sc.hasNextInt()){
            int x = sc.nextInt();//輸入x座標
            int y = sc.nextInt();//輸入y座標

            /* 使用 Key-Value(鍵-值) 方式儲存 */
            HashMap listHM = new HashMap<>();
            listHM.put("x", x);//設定(鍵,值)
            listHM.put("y", y);//設定(鍵,值)
            list.add(listHM);//新增置 list 容器

            int count = 0; //計數
            boolean is = true;
           
             /* 列出所有元素方式 */
             /*
            Collection collection = map.values();       // 透過 values() 取得 Collection
            Iterator iterator = collection.iterator();  // 再由 Collection 變出 Iterator
            while(iterator.hasNext())                   // 最後由 Iterator 列出所有元素
                System.out.println(iterator.next());
            System.out.println();
            
            Iterator iterator;
            for(iterator = list.iterator(); iterator.hasNext();){
                System.out.println(iterator.next());
            }
            */

            /* 取出 list 容器的值 */
            for(int i=0; i data = list.get(i); //把取得 list 容器裡的值,存放置 data(HashMap)。
                /* 進行題目要求之判斷 */
                if(x<= data.get("x")){ //用 data.get(鍵) 取值
                    is = false;
                }
                if(y<= data.get("y")){
                    is = false;
                }

                if(is){
                    count++;
                }
            }
            System.out.println(count);
            
        }
        
    }
}

輸入範例:
1 1
2 3
3 2
4 1
輸出範例:
0
1
1
0

結果:

1 1
0
2 3
1
3 2
1
4 1
0

心得:

感謝朋友,教我此方式。歡迎交流。

留言

熱門文章