HDOJ 採礦(java)

採礦

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2339    Accepted Submission(s): 1133
Special Judge


Problem Description
某天gameboy玩魔獸RPG。有一個任務是在一個富含金礦的圓形小島上建一個基地,以最快的速度採集完這個小島上的所有金礦。這個小島上有n(0<n<1000000)個金礦,每個金礦的礦藏量是相等的。而且這個小島的地勢非常平坦,所以基地可以建在小島的任何位置,每個金礦的採礦速度只跟礦藏到基地的路程長度有關。爲了不讓這個任務太無聊,遊戲設計者對這個小島施了個“魔法”,規定礦工在小島上只能正南正北正西正東走。也就是說礦工不能斜着在島上走。

這個小島在一個二維直角座標系中描述。

你的任務就是幫gameboy找一個建造基地的位置,使礦工能以最快的速度採完所有礦。
 

Input
輸入數據有多組。每組數據的第一行是一個正整數n(0<n<1000000),表示小島上有n個金礦。在接下來的n行中,每行有兩個實數x,y,表示其中一個金礦的座標。n=0表示輸入數據結束。
 

Output
每一組輸入數據對應一行輸出,輸出兩個實數x,y(保留小數點後兩位),也就是你找到的建造基地的位置座標。如果座標不唯一,可以任選一個輸出。
 

Sample Input
4 1.0 1.0 3.0 1.0 3.0 3.0 1.0 3.0 0
 

Sample Output
2.00 2.00
分析:比較水的題,就是求排序數組的中位數問題,當排序數組的個數爲奇數時,該序列中位數就是最中間的一個;而爲偶數時,就是最中間兩個數的平均數;
AC代碼如下:
import java.text.DecimalFormat;
import java.util.Arrays;
import java.util.Scanner;
public class Main {


    public static void main(String[] args) {
        
        Scanner in = new Scanner(System.in);
        while(in.hasNext()){
            
            int n = in.nextInt();
            if(n == 0)
                break;
            double[] arrayX = new double[n];
            double[] arrayY = new double[n];
            for(int i=0; i<n; i++){
                
                arrayX[i] = in.nextDouble();
                arrayY[i] = in.nextDouble();
                
            }
            
            Arrays.sort(arrayX);
            Arrays.sort(arrayY);
            DecimalFormat df = new DecimalFormat("#.00");
            if(n%2 != 0){
                System.out.println(df.format(arrayX[n/2])+" "+df.format(arrayY[n/2]));
            }else{
                System.out.println(df.format((arrayX[n/2-1]+arrayX[n/2])/2)+" "+df.format((arrayY[n/2-1]+arrayY[n/2])/2));
            }
            
        }
        
        
    }

}


發佈了20 篇原創文章 · 獲贊 5 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章