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 ///////////////////////////////////////////////////////////////////////////
  • 相关阅读:
    C *p++ (*p)++ *p+=2 区别
    C 找到两字串中最长的相同串
    Jquery插件Jquerycolor
    C Fibonacci前N项和 阶乘的前N项和
    Baidu Google地图应用
    6.11Java多线程、并发、同步、synchronized方法
    6.10Java线程同步_synchronized
    6.18Java多线程并发、同步性能分析
    6.11Java多线程、并发、同步、synchronized块
    6.18Java多线程同步方法实现DemoNo2
  • 原文地址:https://www.cnblogs.com/linqiuwei/p/3288190.html
Copyright © 2011-2022 走看看