• <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  評(píng)論-10  文章-21  trackbacks-0
            pku 3301 texas trip 最小正方形覆蓋
            最小矩形覆蓋有個(gè)良好的性質(zhì),就是最小矩形必定至少一條邊上有兩個(gè)點(diǎn),這樣就可以很方便的枚舉,
            但我沒(méi)有看到最小正方形的類似的性質(zhì)
            這樣的話連枚舉的算法都很困難
            標(biāo)程的算法是枚舉轉(zhuǎn)角,先將[0, PI/2]等分1000份,選個(gè)最大的,再將這附近的角度等分1000份,其他的就舍棄了,然后迭代下去,這樣做應(yīng)該是有風(fēng)險(xiǎn)的,但cas最多只有30個(gè)點(diǎn),等分的單位角度夠小的話,正確率還是很高的
            關(guān)鍵是沒(méi)有更好的枚舉方法,我們只能枚舉連續(xù)的轉(zhuǎn)角,但實(shí)際上我們不能枚舉連續(xù)的東西,只能迭代逼近,這里面也可能發(fā)生錯(cuò)誤

             1 waterloo標(biāo)程
             2 #include <stdio.h>
             3 #include <math.h>
             4 #include <assert.h>
             5 
             6 #define N 1000
             7 
             8 double x[100], y[100], xx, yy, base,scale;
             9 int rep,n,i,j,k,T;
            10 
            11 main(){
            12    double minx, maxx, miny, maxy, dx, dy, dd, best; int besti;
            13    scanf("%d\n",&T);
            14    while (T--) {
            15       assert (1 == scanf("%d",&n));
            16       for (i=0;i<n;i++) scanf("%lf%lf",&x[i],&y[i]);
            17       best = 1000;
            18       base = 0; scale=1;
            19       for (rep=0;rep<10;rep++) {
            20          besti = 0;
            21          for (i=0;i<N;i++) {
            22             double sininc = sin(base+scale*i*M_PI/2/N);
            23             double cosinc = cos(base+scale*i*M_PI/2/N);
            24             maxx = maxy = -1e99; minx = miny = 1e99;
            25             for (j=0;j<n;j++){
            26                xx = cosinc*x[j] - sininc*y[j];
            27                yy = sininc*x[j] + cosinc*y[j];
            28                //printf("x y xx yy %lg %lg %lg %lg\n",x[j],y[j],xx,yy);
            29                if (xx < minx) minx = xx;
            30                if (xx > maxx) maxx = xx;
            31                if (yy < miny) miny = yy;
            32                if (yy > maxy) maxy = yy;
            33             }
            34             dx = maxx - minx;
            35             dy = maxy - miny;
            36             dd = dx;
            37             if (dy > dd) dd = dy;
            38             if (dd < best) {
            39                best = dd;
            40                besti = i;
            41             }
            42             //printf("i %d dd %0.5lf\n",i,dd);
            43          }
            44          base += scale*(besti-1)*M_PI/2/N;
            45          scale = scale/N*2;
            46       }
            47       printf("%0.2lf\n",best*best);
            48    }
            49    assert(1 != scanf(" %c",&i));
            50 }
            51 

            posted on 2009-02-28 16:56 wangzhihao 閱讀(545) 評(píng)論(0)  編輯 收藏 引用
            亚洲午夜精品久久久久久人妖| 国产精品久久国产精麻豆99网站| 国产99久久久国产精免费| 91精品国产91久久| 日日狠狠久久偷偷色综合免费| 久久精品卫校国产小美女| 久久精品国产亚洲AV大全| 99久久99久久精品国产| 久久人人爽人人爽人人爽| 国产成人精品久久亚洲高清不卡| 亚洲精品无码久久毛片| 久久亚洲AV成人出白浆无码国产| 国产精品内射久久久久欢欢| 久久人人爽人人爽人人AV东京热| 激情五月综合综合久久69| 久久亚洲熟女cc98cm| 91精品婷婷国产综合久久| 久久久久久久久无码精品亚洲日韩| 久久九九久精品国产| 久久久91精品国产一区二区三区| 麻豆精品久久久久久久99蜜桃 | 99久久精品免费看国产免费| 久久精品国产久精国产一老狼| 国产福利电影一区二区三区,免费久久久久久久精 | 亚洲国产精品久久久久婷婷老年| 一本一本久久A久久综合精品| 亚洲а∨天堂久久精品9966| 狠狠久久综合伊人不卡| 久久99精品久久久久久不卡| 久久精品国产精品国产精品污| 久久大香香蕉国产| 国内精品久久久久久99蜜桃| 久久精品无码一区二区无码| 狠狠色综合网站久久久久久久高清| 亚洲色欲久久久久综合网 | 久久精品人成免费| 日本久久久久亚洲中字幕| 无码日韩人妻精品久久蜜桃 | 久久国产精品无码HDAV | 国产一区二区三精品久久久无广告| 99久久精品国内|