• <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年3月>
            2324252627281
            2345678
            9101112131415
            16171819202122
            23242526272829
            303112345
            統計
            • 隨筆 - 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開獎
            国产 亚洲 欧美 另类 久久| 欧美亚洲国产精品久久久久| 大伊人青草狠狠久久| 久久久久久综合一区中文字幕| 91久久九九无码成人网站| 亚洲一级Av无码毛片久久精品| 一本色综合网久久| 91久久福利国产成人精品| 国产精品亚洲综合久久| 久久99精品久久久久久久久久| 久久精品成人免费观看97| 久久水蜜桃亚洲av无码精品麻豆| 色噜噜狠狠先锋影音久久| 中文成人无码精品久久久不卡| jizzjizz国产精品久久| 久久久午夜精品| 伊人久久大香线蕉影院95| 久久亚洲AV成人无码国产| 久久综合九色综合久99| 久久精品视频免费| 久久精品国产亚洲AV香蕉| 性欧美大战久久久久久久| 国产成人综合久久精品尤物| 国产精品久久久久AV福利动漫| 要久久爱在线免费观看| 欧美午夜A∨大片久久 | 99麻豆久久久国产精品免费| 99久久做夜夜爱天天做精品| 国产真实乱对白精彩久久| 成人久久精品一区二区三区| 亚洲AV无码久久精品蜜桃| 99久久做夜夜爱天天做精品| 欧美午夜精品久久久久久浪潮| 久久国产精品偷99| 久久久人妻精品无码一区| 欧美与黑人午夜性猛交久久久| 美女写真久久影院| 九九久久精品国产| 亚州日韩精品专区久久久| 亚洲精品无码专区久久同性男| 伊人 久久 精品|