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

            學習心得(code)

            superlong@CoreCoder

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              74 Posts :: 0 Stories :: 5 Comments :: 0 Trackbacks

            公告

            文字可能放在http://blog.csdn.net/superlong100,此處存放代碼

            常用鏈接

            留言簿(4)

            我參與的團隊

            搜索

            •  

            最新隨筆

            最新評論

            • 1.?re: Poj 1279
            • 對于一個凹多邊形用叉積計算面積 后能根據結果的正負來判斷給的點集的時針方向?
            • --bsshanghai
            • 2.?re: Poj 3691
            • 你寫的這個get_fail() 好像并是真正的get_fail,也是說fail指向的串并不是當前結點的子串。為什么要這樣弄呢?
            • --acmer1183
            • 3.?re: HDU2295[未登錄]
            • 這個是IDA* 也就是迭代加深@ylfdrib
            • --superlong
            • 4.?re: HDU2295
            • 評論內容較長,點擊標題查看
            • --ylfdrib
            • 5.?re: HOJ 11482
            • 呵呵..把代碼發在這里很不錯..以后我也試試...百度的編輯器太爛了....
            • --csuft1

            閱讀排行榜

            評論排行榜

            #include <iostream>
            #include 
            <math.h>
            #include 
            <string.h>
            #define eps 1e-7

            using namespace std;

            struct point{
                
            double x, y;
                
            void read(){scanf("%lf %lf"&x, &y);}
                
            void write(){printf("%.2lf %.2lf\n", x, y);}
                point 
            operator-(point &a)
                {
                    point t;
                    t.x 
            = x - a.x;
                    t.y 
            = y - a.y;
                    
            return t;
                }
                point 
            operator+(point &a)
                {
                    point t;
                    t.x 
            = x + a.x;
                    t.y 
            = y + a.y;
                    
            return t;
                }
            };

            int n;
            point p[
            105];

            double dist(point a, point b)
            {
                point c 
            = a - b;
                
            return sqrt( c.x * c.x + c.y * c.y);
            }

            bool flag;

            double xmul(point a, point b, point c)
            {
            return (c.x - a.x) * (b.y - a.y) - (c.y - a.y) * (b.x - a.x);}

            point intersection(point u1, point u2,point v1, point v2)
            {
                point ret 
            = u1;
                
            double t = ((u1.x - v1.x)*(v1.y-v2.y)-(u1.y-v1.y)*(v1.x-v2.x))
                            
            /((u1.x-u2.x)*(v1.y-v2.y)-(u1.y-u2.y)*(v1.x-v2.x));
                ret.x 
            += (u2.x - u1.x) * t;
                ret.y 
            += (u2.y - u1.y) * t;
                
            return ret;
            }


            point change(point a, point b, point next, 
            double L)
            {
                point t;
                t.x 
            = -(b - a).y;
                t.y 
            = (b - a).x;
                
            double len = sqrt(t.x * t.x + t.y * t.y);
                t.x 
            /= len;        t.y /= len;
                t.x 
            *= L; t.y *= L;
                t 
            = t + next;
                
            return t;
            }

            int jud(double h)
            {
                point tp[
            105], tt[105], ns, ne, s, e, pp ;
                
            int len = 0, tlen, i, j;

                
            for(i = 0; i <= n; i ++) tp[i] = p[i];
                len 
            = n;
                
                
            for(i = 0; i < n; i ++)
                {
                    s 
            = change(p[i], p[i + 1], p[i], h);
                    e 
            = change(p[i], p[i + 1], p[i + 1], h); 
                    
            //        s.write();
            //        e.write();
                    
                    tlen 
            = 0;
                    
            for(j = 0; j < len; j ++)
                    {
                        ns 
            = tp[j];    ne = tp[j + 1];
                        
            if(xmul(s, e, ns) <= 0)
                            tt[tlen 
            ++= ns;
                        
            if(xmul(s, e, ns) * xmul(s, e, ne) < 0)
                        {
                            pp 
            = intersection(s, e, ns, ne);
                            
                            tt[tlen 
            ++= pp;
                        }    
                    }
                    tt[tlen] 
            = tt[0];
                    
            for(j = 0; j <= tlen; j ++
                    {
                        tp[j] 
            = tt[j];
            //            printf("point:   ");
            //            tp[j].write();
                    }
                    len 
            = tlen;
            //        printf("%d\n", len);
                }
                
            return len;
            }

            double bsearch(double left, double right)
            {    
                
            while(right-left>eps)
                {
                    
            double mid=(left+right)/2;
            //        printf("%lf %lf %lf:\n", left, mid, right);
                    if(jud(mid))left=mid;
                    
            else          right=mid;
                }
                
            return left; 

                
            }

            int main()
            {
                
            while(scanf("%d"&n), n)
                {
                    
            for(int i = 0; i < n; i ++)
                        p[i].read();    
                    p[n] 
            = p[0];
                    
            double minn = -1, maxx = -1;
                    
            for(int i = 0; i < n; i ++)
                    
            for(int j = i + 1; j < n; j ++)
                    {
                        
            double dis = dist(p[i], p[j]) / 2;
                        
            if(dis < minn || minn < eps)
                            minn 
            = dis;
                        
            if(dis > maxx || maxx < eps)
                            maxx 
            = dis;
                    }
                    flag 
            = 0;
                    
            //printf("%.2lf  %.2lf\n", minn, maxx); while(1);
                    double ans = bsearch(0, maxx);
                    printf(
            "%.6lf\n", ans);
                }
            }

            posted on 2009-09-18 21:10 superlong 閱讀(477) 評論(0)  編輯 收藏 引用
            久久性精品| 亚洲AV日韩精品久久久久久| 亚洲精品成人网久久久久久| 欧美亚洲日本久久精品| 亚洲国产成人久久综合区| 欧美一区二区三区久久综合| 国产精品一区二区久久| 久久久久久噜噜精品免费直播 | 久久国产福利免费| 天堂无码久久综合东京热| 亚洲国产精品无码久久久不卡| 国产999精品久久久久久| 少妇熟女久久综合网色欲| 久久99精品国产99久久6男男| 久久精品免费全国观看国产| 久久婷婷五月综合国产尤物app| 久久综合视频网站| 亚洲一本综合久久| 久久久久久久综合狠狠综合| 久久久久四虎国产精品| 国产美女久久精品香蕉69| 久久人妻AV中文字幕| 国产亚洲精午夜久久久久久| 久久精品黄AA片一区二区三区| 精品综合久久久久久98| 久久久91人妻无码精品蜜桃HD| 91精品国产色综合久久| 99久久国产精品免费一区二区| 一本色道久久综合| 久久精品国产第一区二区三区| 国内精品久久久人妻中文字幕| 丁香久久婷婷国产午夜视频| 精品999久久久久久中文字幕 | 国产成人精品久久亚洲| 久久精品国产亚洲AV无码麻豆 | 青青青青久久精品国产h| 麻豆成人久久精品二区三区免费 | 久久免费看黄a级毛片| 亚洲v国产v天堂a无码久久| 久久99精品国产麻豆蜜芽| 日本久久久久久中文字幕|