• <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++
            日歷
            <2014年1月>
            2930311234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678
            統計
            • 隨筆 - 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 閱讀(180) 評論(0)  編輯 收藏 引用
             
            Copyright © HAOSOLA Powered by: 博客園 模板提供:滬江博客
            PK10開獎 PK10開獎
            久久久久久青草大香综合精品| 国产成人无码精品久久久久免费| 久久天天婷婷五月俺也去| 亚洲精品无码久久毛片| 久久亚洲精精品中文字幕| 精品午夜久久福利大片| 一级女性全黄久久生活片免费 | 亚洲精品NV久久久久久久久久| 久久久这里只有精品加勒比| 久久久久亚洲AV成人片| 人人狠狠综合88综合久久| 久久精品国产亚洲av高清漫画 | 久久午夜夜伦鲁鲁片免费无码影视| 日韩精品久久久久久免费| 久久国产视频99电影| 久久精品人人做人人爽电影蜜月 | 亚洲中文久久精品无码ww16 | 久久精品国产99国产精偷 | 亚洲国产精品久久电影欧美| 99久久国产免费福利| 久久综合给久久狠狠97色| 无码人妻久久一区二区三区蜜桃| 久久超碰97人人做人人爱| 一本大道久久东京热无码AV| 亚洲国产精品久久| 久久99久久99精品免视看动漫| 精品人妻伦九区久久AAA片69| 久久精品国产网红主播| 久久人妻无码中文字幕| 久久亚洲AV无码西西人体| 久久婷婷综合中文字幕| 久久精品夜夜夜夜夜久久| 久久精品国产亚洲AV影院| 伊人久久大香线蕉综合热线| 久久最新免费视频| 亚洲国产成人久久精品99| 精品免费久久久久国产一区| 久久婷婷五月综合97色一本一本 | 久久亚洲精品国产精品婷婷| 亚洲国产成人久久综合一| 久久久久免费精品国产|