• <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 1708 Connected Gheeves

              1/*
              2EOJ 1708 Connected Gheeves
              3
              4
              5----問題描述:
              6
              7Gheeves (plural of gheef) are some objects similar to funnels. We define a gheef as a two dimensional object specified by a sequence of points (p1, p2, , pn) with the following conditions:
              8
              9 1. 3 ≤ n ≤ 1000
             10 2. If a point pi is specified by the coordinates (xi, yi), there is an index 1 < c < n such that y1 > y2 >  > yc and yc < yc+1 < yc+2 <  < yn. pc is called the cusp of the gheef.
             11 3. For all 1 ≤ i < c, xi < xc and for all c < i ≤ n, xi > xc.
             12 4. For 1 < i < c, the amount of rotation required to rotate pi-1 around pi in clockwise direction to become co-linear with pi and pi+1, is greater than 180 degrees. Likewise, for c < i < n, the amount of rotation required to rotate pi-1 around pi in clockwise rotation to become co-linear with pi and pi+1, is greater than 180 degrees.
             13 5. The set of segments joining two consecutive points of the sequence intersect only in their endpoints.
             14
             15We call the sequence of segments (p1p2, p2p3, , pn-1pn), the body of the gheef. In this problem, we are given two gheeves P = (p1, p2, , pn) and Q = (q1, q2, , qm), such that all x coordinates of pi are negative integers and all x coordinates of qi are positive integers. Assuming the cusps of the two gheeves are connected with a narrow pipe, we pour a certain amount of water inside the gheeves. As we pour water, the gheeves are filled upwards according to known physical laws (the level of water in two gheeves remains the same). Note that in the gheef P, if the level of water reaches min(y1, yn), the water pours out of the gheef (the same is true for the gheef Q). Your program must determine the level of water in the two gheeves after pouring a certain amount of water. Since we have defined our problem in two dimensions, the amount of water is measured in terms of area it fills. Note that the volume of pipe connecting cusps is considered as zero.
             16
             17
             18----輸入:
             19
             20The first number in the input line, t is the number of test cases. Each test case is specified on three lines of input. The first line contains a single integer a (1 ≤ a ≤ 100000) which specifies the amount of water poured into two gheeves. The next two lines specify the two gheeves P and Q respectively, each of the form k x1 y1 x2 y2  xk yk where k is the number of points in the gheef (n for P and m for Q), and the xi yi sequence specify the coordinates of the points in the sequences.
             21
             22
             23----輸出:
             24
             25The output contains t lines, each corresponding to an input test case in that order. The output line contains a single integer L indicating the final level of water, expressed in terms of y coordinates rounded to three digits after decimal points.
             26
             27
             28----樣例輸入:
             29
             302
             3125
             323 -30 10 -20 0 -10 10
             333 10 10 20 0 30 10
             3425
             353 -30 -10 -20 -20 -10 -10
             363 10 10 20 0 30 10
             37
             38
             39----樣例輸出:
             40
             413.536
             42-15.000
             43
             44
             45----分析:
             46
             47二分答案,計算面積。
             48
             49*/

             50
             51
             52#include <iostream>
             53#include <cstdio>
             54#include <cmath>
             55#include <iomanip>
             56#include <algorithm>
             57
             58using namespace std;
             59
             60
             61template<class T, unsigned int N>
             62class  Con
             63{
             64public : 
             65        void input() {
             66                int i;
             67                cin >> this->n;
             68                for ( i = 0; i < this->n; ++i ) {
             69                        cin >> this->x[ i ] >> this->y[ i ];
             70                }

             71                this->top = min( this->y[ 0 ], this->y[ n - 1 ] );
             72                for ( i = 1; (i < this->n) && (this->y[ i - 1 ] > this->y[ i ]); ++i ) {
             73                }

             74                this->= i - 1;
             75                this->bottom = this->y[ this->c ];
             76        }

             77
             78        double cross( double x0, double y0, double x1, double y1 ) const {
             79                return x0 * y1 - x1 * y0;
             80        }

             81
             82        double area( double level ) const {
             83                if ( this->bottom >= level ) {
             84                        return 0;
             85                }

             86                if ( this->top <= level ) {
             87                        level = this->top;
             88                }

             89                double yn = level;
             90                int i;
             91
             92                for ( i = 1; (i <= this->c) && (this->y[ i ] >= yn); ++i ) {
             93                }

             94                int lei = i;
             95                double le = (this->y[ i-1 ] - yn) * (this->x[ i ] - this->x[ i-1 ]) / 
             96                        (this->y[ i-1 ] - this->y[ i ]) + this->x[ i-1 ];
             97
             98                for ( i = this->+ 1; (i < this->n) && (this->y[ i ] < yn); ++i ) {
             99                }

            100                int rii = i - 1;
            101                double ri = this->x[ i ] - 
            102                        (this->y[ i ] - yn) * (this->x[ i ] - this->x[ i-1 ]) / 
            103                        (this->y[ i ] - this->y[ i-1 ]);
            104
            105                double area2 = 0;
            106                for ( i = lei; i < this->c; ++i ) {
            107                        area2 += cross( this->x[ i+1 ] - le, this->y[ i+1 ] - yn, 
            108                                this->x[ i ] - le, this->y[ i ] - yn );
            109                }

            110                for ( i = rii; i > this->c; --i ) {
            111                        area2 += cross( this->x[ i ] - ri, this->y[ i ] - yn, 
            112                                this->x[ i-1 ] - ri, this->y[ i-1 ] - yn );
            113                }

            114                return ( (ri - le) * (yn - this->bottom) - area2 ) / 2;
            115        }

            116
            117        T  getBottom() const {
            118                return this->bottom;
            119        }

            120        T  getTop() const{
            121                return this->top;
            122        }

            123
            124private : 
            125        int n, c;
            126        T   x[ N ], y[ N ], bottom, top;
            127}
            ;
            128
            129
            130const int N = 1009;
            131const double EPS = 0.0001;
            132
            133Con<int, N> p, q;
            134int a;
            135
            136double solve() {
            137        double hig = min( p.getTop(),    q.getTop()    );
            138        double low = min( p.getBottom(), q.getBottom() );
            139        double mid;
            140        while ( hig - low > EPS ) {
            141                mid = (hig + low) / 2;
            142                if ( p.area(mid) + q.area(mid) < a ) {
            143                        low = mid;
            144                }

            145                else {
            146                        hig = mid;
            147                }

            148        }

            149        return hig;
            150}

            151
            152int main() {
            153        int t;
            154        cin >> t;
            155        while ( 0 < t-- ) {
            156                cin >> a;
            157                p.input();
            158                q.input();
            159                cout << fixed << setprecision(3<< solve() << endl;
            160        }

            161        return 0;
            162}

            163

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

            国产三级观看久久| 久久久久se色偷偷亚洲精品av| 久久亚洲精品成人AV| 狠狠久久亚洲欧美专区| 无夜精品久久久久久| 99久久人妻无码精品系列| 狠狠色综合网站久久久久久久| 亚洲愉拍99热成人精品热久久| 色综合久久综合网观看| 久久AV无码精品人妻糸列| 国产精品欧美久久久久无广告 | 久久久久99精品成人片| 国内精品久久久久影院日本| 久久只这里是精品66| 久久久91精品国产一区二区三区| 亚洲欧洲中文日韩久久AV乱码| 97久久综合精品久久久综合| 久久AV高潮AV无码AV| 伊人精品久久久久7777| 久久精品女人天堂AV麻| 99久久精品免费国产大片| 久久av无码专区亚洲av桃花岛| 人妻无码αv中文字幕久久琪琪布 人妻无码精品久久亚瑟影视 | 久久综合九色综合欧美狠狠| 久久精品国产亚洲AV不卡| 欧美大战日韩91综合一区婷婷久久青草| 99久久精品国产麻豆| 日韩人妻无码一区二区三区久久| 久久精品中文无码资源站| 亚州日韩精品专区久久久| 久久久久久无码国产精品中文字幕 | 偷窥少妇久久久久久久久| 亚洲精品tv久久久久| 久久久这里有精品中文字幕| 久久精品国产一区二区| 国产精品日韩欧美久久综合| 精品国产青草久久久久福利| 麻豆久久| 欧洲精品久久久av无码电影 | 91精品国产综合久久香蕉| 国产精品欧美亚洲韩国日本久久 |