• <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>
            C++分析研究  
            C++
            日歷
            <2013年11月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            1234567
            統計
            • 隨筆 - 92
            • 文章 - 4
            • 評論 - 4
            • 引用 - 0

            導航

            常用鏈接

            留言簿

            隨筆檔案

            文章檔案

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

             

             給定n個點的坐標
            圓1的坐標 圓2的坐標 詢問次數
            圓1的半徑 圓2的半徑
            問:對于每個詢問,求出(不在圓上的點 - 在2圓重合 部分的點 ) //注意當答案<0 輸出0托福答案
            思路:首先對題意轉化,可以看成是求 n - (在圓1上的點)-(在圓2上的點)
            因為所有點是固定的,所以 (在圓1的點) => DIS( 點,圓心1) <= R1
            只要求出所有滿足上述不等式點的個數即可
            把所有點按 (到圓心1的距離)小到大排序,存在p1數組中,再把p1中有相同dis的點去重后存在k1數組中,k1.num 就表示 距離<=k1.dis的點有 k1.num個托福改分
            然后二分找到k1.dis <= R1 的最大的k1.num ,就是(在圓1上的點)
            對圓2上的點相同操作
            #include
            #include
            #include
            #include
            #include
            #include
            #include
            #include
            #include
            #include
            #include
            #include
            #define inf 2000000
            #define N 200200
            using namespace std;
            struct node{
            int x,y;
            int dis;
            bool operator<(const node& a)const {return a.dis>dis;}
            }p1[N],p2[N],r1,r2;
            struct kk{
            int dis,num;
            }k1[N],k2[N];
            int kn1,kn2;
            int R1,R2,sum1,sum2,n;
            int DIS(node a,node b){return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);}
            int erfen1(int l,int r,int d){
            if(l==r-1 && k1[l].dis<=d && k1[r].dis>d )
            return k1[l].num;
            int mid=(l+r)》1;
            if(k1[mid].dis>d)return erfen1(l,mid,d);
            if(k1[mid].dis
            if(k1[mid].dis==d)return k1[mid].num;
            }
            int erfen2(int l,int r,int d){
            if(l==r-1 && k2[l].dis<=d && k2[r].dis>d )
            return k2[l].num;
            int mid=(l+r)》1;
            if(k2[mid].dis>d)return erfen2(l,mid,d);
            if(k2[mid].dis
            if(k2[mid].dis==d)return k2[mid].num;
            }
            void quchong(){//p數組去重得到k數組
            int i;
            for(i=1;i<=n;i++)
            {
            if(p1[i].dis==p1[i-1].dis)k1[kn1].num++;
            else
            {
            kn1++;
            k1[kn1].dis=p1[i].dis;
            k1[kn1].num=1+k1[kn1-1].num;
            }
            if(p2[i].dis==p2[i-1].dis)k2[kn2].num++;
            else
            {
            kn2++;
            k2[kn2].dis=p2[i].dis;
            k2[kn2].num=1+k2[kn2-1].num;
            }
            }
            }
            int main(){
            int i,j,query,Cas=1;
            p1[0].dis=p2[0].dis=-1; //去重邊界
            while(scanf("%d",&n),n){
            for(i=1;i<=n;i++)scanf("%d%d",&p1[i].x,&p1[i].y),p2[i]=p1[i];
            scanf("%d %d %d %d %d",&r1.x,&r1.y,&r2.x,&r2.y,&query);
            for(i=1;i<=n;i++)
            p1[i].dis=DIS(p1[i],r1), p2[i].dis=DIS(p2[i],r2);
            sort(p1+1,p1+n+1);
            sort(p2+1,p2+n+1);
            kn1=kn2=0;
            quchong();
            k1[0].dis=k2[0].dis=-1; //二分需要的邊界條件
            k1[0].num=k2[0].num=0;

            k1[kn1+1].dis=k2[kn2+1].dis=inf; //二分需要的邊界條件
            printf("Case %d:\n",Cas++);
            while(query--)
            {
            scanf("%d %d",&R1,&R2);
            sum1=erfen1(1,kn1,R1*R1);
            sum2=erfen2(1,kn2,R2*R2);
            int ans=n-sum1-sum2;
            if(ans<0)ans=0;
            printf("%d\n",ans);
            }
            }
            return 0;
            }
            /*
            11
            95 75
            27 6
            93 5
            124 13
            34 49
            65 61
            81 49
            77 33
            110 50
            91 22
            110 25
            57 42 97 36 2
            31 25
            25 25
            15
            1 1
            2 2
            3 3
            4 4
            5 5
            10 5
            15 5
            1 0
            2 0
            3 0
            4 0
            5 0
            6 0
            10 0
            20000 20000
            10 0 5 5 2
            7 1
            8 1
            ans:
            2
            2
            8
            3
            */

            posted on 2013-09-08 09:59 HAOSOLA 閱讀(185) 評論(0)  編輯 收藏 引用
             
            Copyright © HAOSOLA Powered by: 博客園 模板提供:滬江博客
            PK10開獎 PK10開獎
            久久只有这精品99| 久久国产美女免费观看精品 | 久久AV高清无码| 久久婷婷综合中文字幕| 久久人人爽人人爽人人片AV麻豆 | 亚洲中文字幕久久精品无码APP | 久久精品九九亚洲精品天堂| 国产999精品久久久久久| 亚洲精品乱码久久久久久蜜桃图片| 影音先锋女人AV鲁色资源网久久| 久久99精品国产一区二区三区| 久久久久免费视频| 国产精品99久久免费观看| 色婷婷噜噜久久国产精品12p| 国内精品伊人久久久久777| 久久www免费人成精品香蕉| 久久精品国产亚洲AV无码麻豆| 久久久久久国产精品无码下载 | 久久水蜜桃亚洲av无码精品麻豆| 日韩精品无码久久一区二区三| 狠狠久久亚洲欧美专区| 久久久久久久波多野结衣高潮| 国产成人久久久精品二区三区| 97精品国产91久久久久久| 亚洲香蕉网久久综合影视| 久久久久亚洲AV无码专区网站| 欧美亚洲另类久久综合| 久久国产乱子伦免费精品| 久久久久久国产精品美女| 中文字幕久久精品 | 国产69精品久久久久观看软件| 亚洲天堂久久精品| 久久精品国产亚洲一区二区| 久久国产精品无码一区二区三区| 狠狠色丁香久久婷婷综合五月 | 亚洲欧美一级久久精品| 日韩精品久久久久久久电影蜜臀 | 久久久久免费视频| 天天影视色香欲综合久久| 亚洲中文字幕无码久久综合网| 久久久噜噜噜久久熟女AA片|