1. 程式人生 > >HDU 1173.採礦【不水的水題】【中位數】【5月26】

HDU 1173.採礦【不水的水題】【中位數】【5月26】

採礦

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 3696    Accepted Submission(s): 1772
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 輸出X,Y座標的中位數。。。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAX = 1000005;
int n;
double X[MAX], Y[MAX];
int main()
{
    while(scanf("%d", &n) != EOF)
    {
        if(n == 0) break;
        for(int i = 0;i < n; ++i)
        {
            scanf("%lf %lf", &X[i], &Y[i]);
        }
        sort(X, X+n);
        sort(Y, Y+n);
        printf("%.2f %.2f\n", X[n/2], Y[n/2]);
    }
    return 0;
}