• <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 閱讀(481) 評論(0)  編輯 收藏 引用
            色综合合久久天天给综看| 国产99久久精品一区二区| 国色天香久久久久久久小说| 久久精品www人人爽人人| 精品无码久久久久久久动漫| 五月丁香综合激情六月久久| 久久精品国产亚洲av瑜伽| 久久国产精品99国产精| 亚洲日韩欧美一区久久久久我| 99久久精品国产高清一区二区 | 国产精品久久久亚洲| 久久亚洲精品无码VA大香大香| 成人国内精品久久久久影院VR| 精品国产乱码久久久久久人妻| 国产无套内射久久久国产| 97超级碰碰碰久久久久| 国产精品免费福利久久| 久久国产精品无码HDAV| 久久精品无码专区免费青青| 日韩中文久久| 伊人久久精品影院| 久久久这里只有精品加勒比| 天天做夜夜做久久做狠狠| 国产精品成人99久久久久| 99久久国产综合精品五月天喷水| 国产精品毛片久久久久久久| 久久精品国产亚洲AV无码娇色 | 国产精品久久国产精麻豆99网站| 亚洲综合精品香蕉久久网| 久久久久久亚洲精品影院| 欧美久久久久久午夜精品| 久久久久亚洲AV成人网人人网站| 久久99国产一区二区三区| 国内精品久久久久国产盗摄| 国产综合精品久久亚洲| 一级做a爰片久久毛片看看| 久久久久久综合网天天| 精品久久久久香蕉网| 国产精品热久久毛片| 亚洲伊人久久成综合人影院 | 狠狠色综合网站久久久久久久高清|