• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-21  評論-10  文章-21  trackbacks-0
            題意是三維空間上有一點集{a1,a2...an},每個點 ai 有一個參數(shù) pi,現(xiàn)在要找到一點 t          
            使得所有形如 (|t.x - ai.x| +|t.y - ai.y| + |t.z - ai.z|)/pi 的值最大的最小

            b_merry的做法:

              1 #include <string>
              2 #include <vector>
              3 #include <map>
              4 #include <cstdlib>
              5 #include <cstring>
              6 #include <cassert>
              7 #include <set>
              8 #include <iostream>
              9 #include <sstream>
             10 #include <cstddef>
             11 #include <algorithm>
             12 #include <utility>
             13 #include <iterator>
             14 #include <numeric>
             15 #include <list>
             16 #include <complex>
             17 #include <cstdio>
             18 
             19 using namespace std;
             20 
             21 typedef vector<int> vi;
             22 typedef vector<string> vs;
             23 typedef long long ll;
             24 typedef complex<double> pnt;
             25 typedef pair<intint> pii;
             26 
             27 #define RA(x) (x).begin(), (x).end()
             28 #define FE(i, x) for (typeof((x).begin()) i = (x).begin(); i != (x).end(); i++)
             29 #define SZ(x) ((int) (x).size())
             30 
             31 template<class T>
             32 void splitstr(const string &s, vector<T> &out)
             33 {
             34     istringstream in(s);
             35     out.clear();
             36     copy(istream_iterator<T>(in), istream_iterator<T>(), back_inserter(out));
             37 }
             38 
             39 template<class T> T gcd(T a, T b) { return b ? gcd(b, a % b) : a; }
             40 
             41 struct ship
             42 {
             43     double xyz[3];
             44     double p;
             45 };
             46 
             47 static bool reached(double q, const vector<ship> &ships)
             48 {
             49     /*如果要滿足最小的q,那ships必定散落在四面八方,否則就不是最小
             50        這樣就有四個 關(guān)于x , y, z 的約束不等式 */
             51     int delta[3][4= 
             52     {
             53         {1111},
             54         {-1-111},
             55         {-11-11}
             56     };
             57     int N = ships.size();
             58     double range[4][2];
             59     for (int i = 0; i < 4; i++)
             60     {
             61         range[i][0= -HUGE_VAL;
             62         range[i][1= HUGE_VAL;
             63     }
             64     for (int i = 0; i < N; i++)
             65     {
             66         for (int a = 0; a < 4; a++)
             67         {
             68             double m = 
             69                 delta[0][a] * ships[i].xyz[0]
             70                 + delta[1][a] * ships[i].xyz[1]
             71                 + delta[2][a] * ships[i].xyz[2];
             72             range[a][0= max(range[a][0], m - q * ships[i].p);
             73             range[a][1= min(range[a][1], m + q * ships[i].p);//求形如x * y * z的范圍,*代表加或減
             74         }
             75     }
             76     for (int a = 0; a < 4; a++)
             77     {
             78         if (range[a][0> range[a][1])  
             79             return false;
             80     }
             81 
             82     bool low = false, high = false;
             83     for (int v = 0; v < 8; v++)
             84     {
             85         double x_y_z = (v & 1? range[0][1] : range[0][0];  // (x-y-z)的范圍
             86         double x_yz  = (v & 2? range[1][1] : range[1][0]; //  (x -y+z)的范圍
             87         double xy_z  = (v & 4? range[2][1] : range[2][0];// (x+y-z)的范圍
             88         /* 三個約束方程,又有三個未知數(shù),所以單獨每個成立的話,他們就成立了,
             89            這三個約束不等式,再并上第四個如果有交集,就說明存在繼續(xù)縮小的可能
             90         */
             91         double xyz = x_yz + xy_z - x_y_z;   //(x+y+z)的范圍
             92         if (xyz >= range[3][0&& xyz <= range[3][1])//第四個約束條件范圍更大
             93             return true;
             94         else if (xyz < range[3][0])
             95             low = true;
             96         else
             97             high = true;
             98     }
             99     return low && high;//第四個約束條件范圍更小
            100 }
            101 
            102 int main()
            103 {
            104     int cases;
            105     cin >> cases;
            106     for (int cas = 0; cas < cases; cas++)
            107     {
            108         int N;
            109         cin >> N;
            110         vector<ship> ships(N);
            111         for (int i = 0; i < N; i++)
            112             cin >> ships[i].xyz[0]
            113                 >> ships[i].xyz[1]
            114                 >> ships[i].xyz[2]
            115                 >> ships[i].p;
            116         double l = 0.0;
            117         double r = 1e9;
            118         while (r - l > 1e-8 && r - l > 1e-8 * r)
            119         {
            120             double m = (l + r) * 0.5;
            121             if (reached(m, ships))
            122                 r = m;
            123             else
            124                 l = m;
            125         }
            126         printf("Case #%d: %.9f\n", cas + 1, l);
            127     }
            128     return 0;
            129 }
            130 



            posted on 2009-03-08 16:00 wangzhihao 閱讀(165) 評論(0)  編輯 收藏 引用

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            欧美一区二区三区久久综合| 久久超碰97人人做人人爱| 久久综合综合久久综合| yy6080久久| 色狠狠久久综合网| 欧美激情精品久久久久久久九九九| 99久久99久久久精品齐齐| 亚洲AV无码一区东京热久久| 亚洲欧美日韩精品久久亚洲区| 国产精品熟女福利久久AV| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 夜夜亚洲天天久久| 99久久国产综合精品成人影院| 精品综合久久久久久97超人| 久久久国产精品福利免费| 久久中文娱乐网| 久久毛片免费看一区二区三区| 日韩精品国产自在久久现线拍| 久久精品无码一区二区app| 久久久久国色AV免费看图片| 伊人色综合九久久天天蜜桃| 久久久久久精品无码人妻| 久久99国内精品自在现线| 91精品国产综合久久香蕉| 一本色道久久HEZYO无码| 色综合久久久久久久久五月| 国产精品美女久久久m| 天天综合久久一二三区| 亚洲精品第一综合99久久| 蜜臀av性久久久久蜜臀aⅴ| 久久久久久久尹人综合网亚洲| 久久精品国产一区二区三区不卡 | 狠狠色丁香久久婷婷综合_中| 久久九九兔免费精品6| 国产精品久久久久久久久免费| 精品久久人人做人人爽综合| 狠狠色婷婷久久综合频道日韩 | 久久免费看黄a级毛片| 色综合久久中文色婷婷| 久久久无码精品亚洲日韩京东传媒| 久久水蜜桃亚洲av无码精品麻豆|