zoukankan      html  css  js  c++  java
  • poj 1981 Circle and Points

    题目链接:http://poj.org/problem?id=1981

    解题思路:枚举两个点,求过这两点的单位圆,判断有多少个点在圆中。

      1 ///////////////////////////////////////////////////////////////////////////
      2 //problem_id: poj 1981
      3 //user_id: SCNU20102200088
      4 ///////////////////////////////////////////////////////////////////////////
      5 
      6 #include <algorithm>
      7 #include <iostream>
      8 #include <iterator>
      9 #include <iomanip>
     10 #include <cstring>
     11 #include <cstdlib>
     12 #include <string>
     13 #include <vector>
     14 #include <cstdio>
     15 #include <cctype>
     16 #include <cmath>
     17 #include <queue>
     18 #include <stack>
     19 #include <list>
     20 #include <set>
     21 #include <map>
     22 using namespace std;
     23 
     24 ///////////////////////////////////////////////////////////////////////////
     25 typedef long long LL;
     26 const double EPS=1e-8;
     27 const double PI=acos(-1.0);
     28 
     29 const int x4[]={-1,0,1,0};
     30 const int y4[]={0,1,0,-1};
     31 const int x8[]={-1,-1,0,1,1,1,0,-1};
     32 const int y8[]={0,1,1,1,0,-1,-1,-1};
     33 
     34 typedef int T;
     35 T max(T a,T b){ return a>b? a:b; }
     36 T min(T a,T b){ return a<b? a:b; }
     37 ///////////////////////////////////////////////////////////////////////////
     38 
     39 ///////////////////////////////////////////////////////////////////////////
     40 //Add Code:
     41 struct Point{
     42     double x,y;
     43     Point(double dx=0,double dy=0):x(dx),y(dy){}
     44 }p[305];
     45 
     46 double dist(Point a,Point b){
     47     return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
     48 }
     49 
     50 Point circle(Point a,Point b){
     51     Point mid((a.x+b.x)/2,(a.y+b.y)/2);
     52     double angle=atan2(a.x-b.x,b.y-a.y);
     53     double d=sqrt(1-dist(a,mid)*dist(a,mid));
     54     Point ret(mid.x+d*cos(angle),mid.y+d*sin(angle));
     55     return ret;
     56 }
     57 ///////////////////////////////////////////////////////////////////////////
     58 
     59 int main(){
     60     ///////////////////////////////////////////////////////////////////////
     61     //Add Code:
     62     int n,i,j,k;
     63     while(scanf("%d",&n)!=EOF){
     64         if(n==0) break;
     65         for(i=0;i<n;i++) scanf("%lf%lf",&p[i].x,&p[i].y);
     66         int Max=1;
     67         for(i=0;i<n;i++){
     68             for(j=i+1;j<n;j++){
     69                 if(dist(p[i],p[j])>2.0) continue;
     70                 Point center=circle(p[i],p[j]);
     71                 int num=0;
     72                 for(k=0;k<n;k++){
     73                     if(dist(center,p[k])<1.0+EPS) num++;
     74                 }
     75                 Max=max(Max,num);
     76             }
     77         }
     78         printf("%d
    ",Max);
     79     }
     80     ///////////////////////////////////////////////////////////////////////
     81     return 0;
     82 }
     83 
     84 ///////////////////////////////////////////////////////////////////////////
     85 /*
     86 Testcase:
     87 Input:
     88 3
     89 6.47634 7.69628
     90 5.16828 4.79915
     91 6.69533 6.20378
     92 6
     93 7.15296 4.08328
     94 6.50827 2.69466
     95 5.91219 3.86661
     96 5.29853 4.16097
     97 6.10838 3.46039
     98 6.34060 2.41599
     99 8
    100 7.90650 4.01746
    101 4.10998 4.18354
    102 4.67289 4.01887
    103 6.33885 4.28388
    104 4.98106 3.82728
    105 5.12379 5.16473
    106 7.84664 4.67693
    107 4.02776 3.87990
    108 20
    109 6.65128 5.47490
    110 6.42743 6.26189
    111 6.35864 4.61611
    112 6.59020 4.54228
    113 4.43967 5.70059
    114 4.38226 5.70536
    115 5.50755 6.18163
    116 7.41971 6.13668
    117 6.71936 3.04496
    118 5.61832 4.23857
    119 5.99424 4.29328
    120 5.60961 4.32998
    121 6.82242 5.79683
    122 5.44693 3.82724
    123 6.70906 3.65736
    124 7.89087 5.68000
    125 6.23300 4.59530
    126 5.92401 4.92329
    127 6.24168 3.81389
    128 6.22671 3.62210
    129 0
    130 Output:
    131 2
    132 5
    133 5
    134 11
    135 */
    136 ///////////////////////////////////////////////////////////////////////////
  • 相关阅读:
    itextpdf 和 pdfbox 测试用例
    Java base64 编码、解码
    常用字体
    DIY 单片机 入门
    太难了。
    Java 之 native:JNI 本地方法测试实现
    Java 之 String 引用传递
    Java class 文件 方法的指令含义
    Spring学习文章链接
    数据结构_树_图_总结
  • 原文地址:https://www.cnblogs.com/linqiuwei/p/3288190.html
Copyright © 2011-2022 走看看