• <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>

            coreBugZJ

            此 blog 已棄。

            EOJ 1189 Wall POJ 1113 Wall

              1/*
              2EOJ 1189 Wall
              3POJ 1113 Wall
              4
              5
              6----問題描述:
              7
              8Once upon a time there was a greedy King who ordered his chief Architect to build a wall around the King's castle. The King was so greedy, that he would not listen to his Architect's proposals to build a beautiful brick wall with a perfect shape and nice tall towers. Instead, he ordered to build the wall around the whole castle using the least amount of stone and labor, but demanded that the wall should not come closer to the castle than a certain distance. If the King finds that the Architect has used more resources to build the wall than it was absolutely necessary to satisfy those requirements, then the Architect will loose his head. Moreover, he demanded Architect to introduce at once a plan of the wall listing the exact amount of resources that are needed to build the wall.
              9
             10Your task is to help poor Architect to save his head, by writing a program that will find the minimum possible length of the wall that he could build around the castle to satisfy King's requirements.
             11
             12The task is somewhat simplified by the fact, that the King's castle has a polygonal shape and is situated on a flat ground. The Architect has already established a Cartesian coordinate system and has precisely measured the coordinates of all castle's vertices in feet. 
             13
             14
             15----輸入:
             16
             17Input contains several test cases. The first line of each case contains two integer numbers N and L separated by a space. N (3 <= N <= 1000) is the number of vertices in the King's castle, and L (1 <= L <= 1000) is the minimal number of feet that King allows for the wall to come close to the castle.
             18
             19Next N lines describe coordinates of castle's vertices in a clockwise order. Each line contains two integer numbers Xi and Yi separated by a space (-10000 <= Xi, Yi <= 10000) that represent the coordinates of ith vertex. All vertices are different and the sides of the castle do not intersect anywhere except for vertices.
             20 
             21Process to end of file. 
             22
             23
             24----輸出:
             25
             26For each case in the input, write to the output file the single number that represents the minimal possible length of the wall in feet that could be built around the castle to satisfy King's requirements. You must present the integer number of feet to the King, because the floating numbers are not invented yet. However, you must round the result in such a way, that it is accurate to 8 inches (1 foot is equal to 12 inches), since the King will not tolerate larger error in the estimates.
             27
             28
             29----樣例輸入:
             30
             319 100
             32200 400
             33300 400
             34300 300
             35400 300
             36400 400
             37500 400
             38500 200
             39350 200
             40200 200 
             41
             42
             43----樣例輸出:
             44
             451628
             46
             47
             48----分析:
             49
             50Graham-Scan 求凸包,再根據夾角,求弧長,而總弧長就是周長。
             51
             52
             53*/

             54
             55
             56#include <iostream>
             57#include <cstdio>
             58#include <cmath>
             59#include <algorithm>
             60
             61using namespace std;
             62
             63// #define  TEST
             64
             65#define  N  1009
             66typedef  pair< intint > Point;
             67#define  y  first
             68#define  x  second
             69#define  PI  3.14159265358979
             70
             71int    n;
             72int    le;
             73Point  p[ N ];
             74
             75double solve() {
             76        static Point stk[ N ];
             77        int    tp, i, ntp;
             78        double ans = 0;
             79
             80        sort( p, p+n );
             81
             82#ifdef  TEST
             83        for ( i = 0; i < n; ++i ) {
             84                printf( "x = %d  y = %d\n", p[ i ].x, p[ i ].y );
             85        }

             86#endif
             87
             88        tp = 0;
             89        stk[ tp ] = p[ 0 ];
             90        for ( i = 1; i < n; ++i ) {
             91                while ( (0 < tp) && 
             92                        ((stk[tp].x-stk[tp-1].x)*(p[i].y-stk[tp].y) - 
             93                         (p[i].x-stk[tp].x)*(stk[tp].y-stk[tp-1].y) <= 0
             94                      ) {
             95                                --tp;
             96                }

             97                ++tp;
             98                stk[ tp ] = p[ i ];
             99        }

            100
            101#ifdef  TEST
            102        printf( "stk 1\n" );
            103        for ( i = 0; i <= tp; ++i ) {
            104                printf( "stk x = %d  y = %d\n", stk[ i ].x, stk[ i ].y );
            105        }

            106#endif
            107
            108        ntp = tp; // 左右鏈必須分開處理,點(n-1)左右鏈共用
            109        for ( i = n-2; i >= 0--i ) {
            110                while ( (ntp < tp) && 
            111                        ((stk[tp].x-stk[tp-1].x)*(p[i].y-stk[tp].y) - 
            112                         (p[i].x-stk[tp].x)*(stk[tp].y-stk[tp-1].y) <= 0
            113                      ) {
            114                                --tp;
            115                }

            116                ++tp;
            117                stk[ tp ] = p[ i ];
            118        }

            119
            120#ifdef  TEST
            121        printf( "stk all\n" );
            122        for ( i = 0; i <= tp; ++i ) {
            123                printf( "stk x = %d  y = %d\n", stk[ i ].x, stk[ i ].y );
            124        }

            125#endif
            126
            127        for ( i = 0; i < tp; ++i ) {
            128                ans += sqrt((double)( 
            129                                (stk[i].x-stk[i+1].x)*(stk[i].x-stk[i+1].x) 
            130                                + (stk[i].y-stk[i+1].y)*(stk[i].y-stk[i+1].y) 
            131                        ));
            132        }

            133
            134        ans += 2 * PI * le;
            135        return ans;
            136}

            137
            138int main() {
            139        int i;
            140        while ( 2 == scanf( "%d%d"&n, &le ) ) {
            141                for ( i = 0; i < n; ++i ) {
            142                        scanf( "%d%d"&(p[ i ].x), &(p[ i ].y) );
            143                }

            144                printf( "%0.0lf\n", solve() );
            145        }

            146        return 0;
            147}

            148

            posted on 2012-05-13 22:52 coreBugZJ 閱讀(742) 評論(0)  編輯 收藏 引用 所屬分類: ACMAlgorithm課內作業

            青草影院天堂男人久久| 久久久精品国产Sm最大网站| 久久影院综合精品| 久久天堂AV综合合色蜜桃网 | 精品熟女少妇AV免费久久| 久久久久亚洲Av无码专| 久久se这里只有精品| 人妻精品久久无码专区精东影业| 2020最新久久久视精品爱| 久久99久久99精品免视看动漫| 免费观看久久精彩视频| 欧洲成人午夜精品无码区久久| 日日狠狠久久偷偷色综合96蜜桃 | 综合久久精品色| 99久久精品国产一区二区三区| 久久精品国产AV一区二区三区| 18岁日韩内射颜射午夜久久成人 | 中文字幕乱码久久午夜| 久久精品国产精品亜洲毛片| 国产精品久久永久免费| 欧美亚洲色综久久精品国产| 国产精品99久久久精品无码| 女同久久| 超级碰碰碰碰97久久久久| 国内精品欧美久久精品| 国内精品久久久久久久久电影网 | 91久久婷婷国产综合精品青草| 久久婷婷五月综合色奶水99啪| 久久精品?ⅴ无码中文字幕| 好属妞这里只有精品久久| 久久AV高清无码| 99精品久久久久中文字幕| 国产精品久久毛片完整版| 久久福利青草精品资源站| 久久99精品国产99久久| 精品久久久久中文字幕一区| 久久精品国产亚洲一区二区三区| 久久久久国产一区二区三区| 免费精品久久久久久中文字幕| 无码精品久久一区二区三区| 欧美亚洲国产精品久久久久|