• <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課內作業

            久久夜色精品国产网站| 欧美与黑人午夜性猛交久久久| 2021国产精品久久精品| 久久夜色精品国产网站| 国内精品久久久久久久coent| 青青热久久国产久精品| 久久成人精品视频| 久久久网中文字幕| 99久久国产综合精品麻豆| 久久久99精品成人片中文字幕| 久久综合综合久久综合| 久久久久久国产精品免费免费| 亚洲熟妇无码另类久久久| 久久人人爽人人爽人人片AV麻豆| 久久久久女人精品毛片| 亚洲国产日韩欧美久久| 久久99国产一区二区三区| 久久久久AV综合网成人| 久久久亚洲欧洲日产国码是AV| 亚洲成色999久久网站| 成人综合伊人五月婷久久| 2021国产精品午夜久久| 亚洲国产成人久久一区WWW| 伊人久久大香线蕉精品| 91精品国产综合久久香蕉| 久久精品国产亚洲av水果派| 国产成人精品综合久久久久| 亚洲国产精品无码久久九九| 欧美与黑人午夜性猛交久久久| 国产精品内射久久久久欢欢| 999久久久国产精品| 天天爽天天爽天天片a久久网| 国产精品久久成人影院| 国产精品久久久久影院嫩草 | 婷婷久久综合九色综合98| 一本一本久久aa综合精品| 色妞色综合久久夜夜| 老男人久久青草av高清| 91麻豆国产精品91久久久| 无码AV中文字幕久久专区| 国产国产成人精品久久|