zoj1041 Transmitters

原创 2006年06月16日 13:39:00
  1. //zoj1041 Transmitters

  2. //Accepted 1041 C++ 00:00.00 424K

  3. #include <stdio.h>

  4. #include <math.h>

  5. #define MAXN 1000

  6. struct point {double x,y;}c;

  7. double r;

  8. double xmult(double x1,double y1,double x2,double y2){return x1*y2-x2*y1;}

  9. double dist(point p1,point p2){ return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));}

  10.  

  11. void solve()

  12. {

  13.        int i,j,n,num,max,cnt;

  14.        double dx,dy,dt;

  15.        point pt,p[MAXN];

  16.        scanf ("%d",&n);

  17.        num = 0;

  18.        for (i=0; i<n; ++i) {

  19.               scanf ("%lf %lf",&pt.x,&pt.y);

  20.               if (dist(pt,c)<=r) p[num++] = pt;

  21.        }

  22.        if (num<=2){

  23.               printf ("%d/n",num);

  24.               return ;

  25.        }

  26.        max = 2;

  27.        for (i=0; i<num; ++i){

  28.               cnt = 1;

  29.               dy = p[i].y-c.y;

  30.               dx = p[i].x-c.x;

  31.               for (j=0; j<num; ++j){

  32.                      if (i==j) continue;

  33.                      if (xmult(p[j].x-c.x,p[j].y-c.y,dx,dy)>=0.0) cnt++;

  34.               }

  35.               if (cnt>max) max = cnt;

  36.        }

  37.        printf ("%d/n",max);

  38. }

  39.  

  40. int main()

  41. {

  42. #ifdef ONLINE_JUDGE

  43. #else

  44.        freopen("1041.txt","r",stdin);

  45. #endif

  46.        while (scanf("%lf %lf %lf",&c.x,&c.y,&r)!=EOF){

  47.               if (r<=0.0) break;

  48.               solve();

  49.        }

  50. #ifdef ONLINE_JUDGE

  51. #else

  52.        fclose(stdin);

  53. #endif

  54.        return 0;

  55. }

相关文章推荐

[ZOJ1041] Transmitters

【题目大意】   发射器的发射范围是一个半圆,圆心半径给出,角度任意。在平面上给出N个点,问发射器最多可以覆盖多少个。 【解题思路】    算夹角,排序,统计。 【源代码】#include #incl...

zoj 1041 Transmitters

ZOJ Problem Set - 1041 Transmitters Time Limit: 2 Seconds      Memory Limit: 65536 KB In a...

ZOJ 1041Transmitters

虽然归属于search problems,但是用简单的方法就可以做了。所有的长度都是double,用int就错了。scanf读取double应该用%lf,用%f g++会读取错误。这种浮点数计算,尽量...

ZOJ 1041 Transmitters

In a wireless network with multiple transmitters sending on the same frequencies, it is often a requ...

ZOJ Problem Set - 1041

这个传说中的计算几何,让我搞的话真有点困难,因为神马叉乘判断神马的,以前只是知道名字,具体怎么用从来没有做过,嘿嘿!这算一次尝试吧,自己想了想,感觉应该直接暴力,怕超时,看了看别人的报告,发现居然可以...

POJ 1106 Transmitters(计算几何 极角排序啊)

POJ 1106 Transmitters(计算几何 极角排序啊)

poj1106Transmitters【求旋转半圆能覆盖的最多点数】

Language: Default Transmitters Time Limit: 1000MS   Memory Limit: 10000K Total S...

J - Transmitters解题报告

J - Transmitters Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Su...

POJ 1106 Transmitters (几何覆盖问题)

Transmitters Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4606   A...

POJ 1106 Transmitters

这是道计算几何的简单题,只要以每一个与圆心距离小于等于圆半径的点和圆心构成半圆的直径线,然后找在直径右侧且距圆心距离小于等于圆的半径的点的个数,记录最大值就行了。 #include #include...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:zoj1041 Transmitters
举报原因:
原因补充:

(最多只允许输入30个字)