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
心得:
感謝朋友,教我此方式。歡迎交流。

留言
張貼留言