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

            學(xué)習(xí)心得(code)

            superlong@CoreCoder

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

            公告

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

            常用鏈接

            留言簿(4)

            我參與的團(tuán)隊

            搜索

            •  

            最新隨筆

            最新評論

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

            閱讀排行榜

            評論排行榜

            代碼比較長,寫蹉了……

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

            using namespace std;

            struct point{double x, y, angle, dis;};

            int sig(double a)
            {
            return (a > eps) - (a < -eps);}

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

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

            double mul(point a, point b)
            {
            return a.x*b.x + a.y*b.y;}

            double mod(point a)
            {
            return a.x*a.x + a.y*a.y;}

            double jiajiao(point a, point b)
            {
                
            if(!sig(mul(a,b)-(mod(a)*mod(b)))) return 0;
                
            return acos(mul(a,b)/sqrt(mod(a)*mod(b)));
            }

            bool cmp(point a, point b)
            {
                
            return !sig(a.angle-b.angle) && sig(a.dis-b.dis)<0 || sig(a.angle-b.angle)<0;
            }

            point m0[
            1001], m1[1001], h0[1001], h1[1001], ray, base;
            int len0, len1, id0[1001], id1[1001];
            //m1 m2 原始點(diǎn)集  h1 h2凸包 ray基準(zhǔn)向量 base基準(zhǔn)點(diǎn) 
            //len[0]是 h[0]的長度 
            int n;

            void read()
            {
                
            for(int i = 0; i < n; i ++)
                    scanf(
            "%lf %lf"&m0[i].x, &m0[i].y);
                
            for(int i = 0; i < n; i ++)
                    scanf(
            "%lf %lf"&m1[i].x, &m1[i].y);
            }

            void tubao0()
            {
                point a 
            = m0[0];
                
            int j = 0, i;
                
            for(i = 1; i < n; i ++)
                
            if(m0[i].y==a.y&&m0[i].x<a.x || m0[i].y<a.y)
                {
                    j 
            = i;
                    a 
            = m0[i];
                }
                swap(m0[
            0] , m0[j]);    
                m0[
            0].angle = 0;
                
            for(i = 1; i < n; i ++)
                {
                    m0[i].angle 
            = atan2(m0[i].y - m0[0].y, m0[i].x - m0[0].x);
                    m0[i].dis 
            = dist(m0[0], m0[i]);
                }
                sort(m0 
            + 1, m0 + n, cmp);
                
            int top = 0;
                id0[
            0= n - 1;
                h0[top 
            ++= m0[n-1];
                id0[
            1= 0;
                h0[top 
            ++= m0[0];    
                
            if( sig( m0[1].angle - m0[n-1].angle ) == 0 )
                {
                    id0[top] 
            = 1;
                    h0[top 
            ++= m0[1];      
                }
                
            else
                {
                    
            for(i = 1;i < n; i ++)
                    {
                        
            if(sig(cross(m0[i], h0[top-2], h0[top-1])) > 0)
                        {
                            id0[top] 
            = i;
                            h0[top 
            ++= m0[i];    
                        }
                        
            else
                        {
                            top 
            --;
                            i 
            --;
                        }    
                    }
                }
                len0 
            = top;
                
            }
            void tubao1()
            {
                point a 
            = m1[0];
                
            int j = 0, i;
                
            for(i = 1; i < n; i ++)
                
            if(m1[i].y==a.y&&m1[i].x<a.x || m1[i].y<a.y)
                {
                    j 
            = i;
                    a 
            = m1[i];
                }
                swap(m1[
            0] , m1[j]);    
                m1[
            0].angle = 0;
                
            for(i = 1; i < n; i ++)
                {
                    m1[i].angle 
            = atan2(m1[i].y - m1[0].y, m1[i].x - m1[0].x);
                    m1[i].dis 
            = dist(m1[0], m1[i]);
                }
                sort(m1 
            + 1, m1 + n, cmp);
                
            //for(i=0;i<n;i++)printf("%lf %lf\n",m0[i].x,m0[i].y);
                int top = 0;
                id1[
            0= n - 1;
                h1[top 
            ++= m1[n-1];
                id1[
            1= 0;
                h1[top 
            ++= m1[0];    
                
            if( sig( m1[1].angle - m1[n-1].angle ) == 0 )
                {
                    id1[top] 
            = 1;
                    h1[top 
            ++= m1[1];         
                }
                
            else
                {
                    
            for(i = 1;i < n; i ++)
                    {
                        
            if(sig(cross(m1[i], h1[top-2], h1[top-1])) > 0)
                        {
                            id1[top] 
            = i;
                            h1[top 
            ++= m1[i];    
                        }
                        
            else
                        {
                            top 
            --;
                            i 
            --;
                        }    
                    }
                }
                len1 
            = top;
                
            }

            void pre()
            {
                point tt;
                ray.x 
            = h0[2].x - h0[1].x;
                ray.y 
            = h0[2].y - h0[1].y;
                swap(m0[id0[
            1]], m0[0]);
                m0[
            0].angle = 0;
                m0[
            0].dis = 0;
                
            for(int i = 1; i < n; i ++)
                {
                    tt.x 
            = m0[i].x - m0[0].x;
                    tt.y 
            = m0[i].y - m0[0].y;
                    m0[i].angle 
            = jiajiao(tt, ray);
                    m0[i].dis 
            = dist(m0[0], m0[i]);
                }
                sort(m0 
            + 1,m0 + n, cmp);
            }

            double enum_()
            {
                
            int i, j, flag;
                point tray, tbase, tt;
                
            double angle, minans = 9999999;
                h1[len1] 
            = h1[0];
                
            for(i = 0; i<= len1; i ++)
                {
                    tray.x 
            = h1[i + 1].x - h1[i].x;
                    tray.y 
            = h1[i + 1].y - h1[i].y;
                    angle 
            = jiajiao(tray, ray);
                    
            //printf("ray:%lf %lf tray:%lf %lf angle = %lf\n",ray.x,ray.y,tray.x,tray.y,angle);

                    m1[
            0].angle = 0;
                    m1[
            0].dis = 0;
                    
            for(j = 0; j < n; j ++)
                    {
                        tt.x 
            = m1[j].x - h1[i].x;
                        tt.y 
            = m1[j].y - h1[i].y;
                        m1[j].angle 
            = jiajiao(tt, tray);
                        m1[j].dis 
            = dist(h1[i], m1[j]);
                    }
                    sort(m1, m1 
            + n, cmp);
                    
                    
            //for(j=0;j<n;j++)printf("%lf %lf\n",m1[j].x,m1[j].y); puts("");
                    
            //for(j=0;j<n;j++)printf("%lf %lf\n",m0[j].x,m0[j].y); puts("");
                        
                    flag 
            = 0;
                    
            for(j = 1; j < n; j ++)
                    {
                        
            //printf("%lf %lf %lf %lf\n",m0[j].angle,m1[j].angle,m0[j].dis,m1[j].dis);
                        if(sig(m0[j].angle - m1[j].angle) || sig(m0[j].dis - m1[j].dis))
                        {
                            flag 
            = 1;
                            
            break;
                        }
                    }
                    
            //printf("%d\n",flag);
                    if(!flag)
                    {
                        
            double xx = jiajiao(tray, ray);
                        
            if(sig(minans - xx) > 0) minans = xx;
                    }
                }
                
            return minans;
            }

            int main()
            {
                
            double ans;
                
            int i;
                
            //freopen("in.txt","r",stdin);
                
            //freopen("out.txt","w",stdout);
                while(scanf("%d"&n) , n)
                {    
                    read();
                    
            if(n == 1)
                    {
                        
            double x = 0;
                        printf(
            "%.10lf\n",x);
                        
            continue;
                    }
                    
            if(n == 2)
                    {
                        point a, b, c;
                        a.x 
            = m0[0].x - m0[1].x;    a.y = m0[0].y - m0[1].y;
                        b.x 
            = m0[1].x - m0[0].x;    b.y = m0[1].y - m0[0].y;
                        c.x 
            = m1[0].x - m1[1].x;    c.y = m1[0].y - m1[1].y;
                        printf(
            "%.10lf\n",min(jiajiao(a,c),jiajiao(b,c)));
                        
            continue;
                    }
                    tubao0();
                    tubao1();
                    
            //for(i=0;i<=len0;i++)printf("%lf %lf\n",h0[i].x,h0[i].y);
                    
            //for(i=0;i<=len1;i++)printf("%lf %lf\n",h1[i].x,h1[i].y);
                    pre();
                    ans 
            = enum_();
                    printf(
            "%.10lf\n",ans);
                }
                
            //while(1);
            }

            posted on 2009-08-16 00:52 superlong 閱讀(239) 評論(1)  編輯 收藏 引用

            Feedback

            # re: HOJ 11482 2009-08-16 09:14 csuft1
            呵呵..把代碼發(fā)在這里很不錯..以后我也試試...百度的編輯器太爛了....  回復(fù)  更多評論
              


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            日韩欧美亚洲综合久久影院d3| 久久综合精品国产一区二区三区| 国产精品一区二区久久精品涩爱 | 国产免费久久精品99re丫y| 欧美精品九九99久久在观看| 久久久无码人妻精品无码| 久久99国产精品久久久 | 久久精品国产亚洲AV忘忧草18| 一本一本久久a久久综合精品蜜桃| 国产成人精品久久二区二区| 亚洲日本va午夜中文字幕久久| 久久99精品久久久久久动态图 | 无码久久精品国产亚洲Av影片 | 无码AV波多野结衣久久| 91麻精品国产91久久久久| 精品久久久久久久久免费影院| 国产成人久久激情91 | 91精品国产乱码久久久久久| 久久这里只有精品视频99| 国产99精品久久| 久久人人爽爽爽人久久久| 亚洲国产精品无码久久青草| 99久久国产综合精品五月天喷水 | 合区精品久久久中文字幕一区 | 久久久国产乱子伦精品作者| 日日狠狠久久偷偷色综合0| 72种姿势欧美久久久久大黄蕉| 久久天天躁狠狠躁夜夜2020一| 久久精品视频91| 94久久国产乱子伦精品免费| 久久精品亚洲一区二区三区浴池| 一级做a爰片久久毛片看看| 久久免费香蕉视频| 国内精品免费久久影院| AAA级久久久精品无码区| 精品久久久久久久久午夜福利| 婷婷久久香蕉五月综合加勒比| 亚洲综合熟女久久久30p| 亚洲午夜久久久久久噜噜噜| 亚洲精品美女久久久久99| 久久久久亚洲AV无码专区首JN|