程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 杭電OJ——1173 采礦(水題)

杭電OJ——1173 采礦(水題)

編輯:C++入門知識

采礦   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     Source lwg        這道題還好吧!不太難!發代碼! [cpp]   //在這裡提示一下思路吧!   //假設所有的礦點都建在一條線上,那麼我們很容易知道,如果將坐標值最大的礦點和最小的礦點連在一起   //那麼,這條線上的每一個點到所有礦點距離之和都最小   //這道題目只是兩條線而已,是上面的一個推廣!下面的求中間的值是一種方法,顯然,這道題目不止一種解法   //如果我們將xy軸上的最大值最小值都連起來,形成一個矩形,那麼矩形裡面所有的值都滿足題意!   #include<iostream>   #include<algorithm>   using namespace std;   #define MAX 1000010      double arrx[MAX],arry[MAX];      bool cmp(double a,double b)   {       return a<b;   }      int main()   {     int i,j,num;     //memset(arrx,0,sizeof(arrx));     //memset(arry,0,sizeof(arry));     while(cin>>num && num!=0)     {         for(i=0;i<num;i++)         scanf("%lf%lf",&arrx[i],&arry[i]);         sort(arrx,arrx+num,cmp);         sort(arry,arry+num,cmp);         printf("%.2f %.2f\n",arrx[(num-1)/2],arry[(num-1)/2]);     }    // system("pause");     return 0;   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved