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

算法思路:由于圆心和半径都确定,又是180度,这里枚举过一点的直径,求出这个直径的一个在圆上的端点,就可以用叉积的大于,等于,小于0判断点在直径上,左,右。 这里要记录直径两边的加直径上的点的个数,去最大的。

代码:

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;const double eps = 1e-8;
const double PI = acos(-1.0);
const double INF = 1000000000000000.000;struct Point{double x,y;Point(double x=0, double y=0) : x(x),y(y){ }    //构造函数
};
typedef Point Vector;struct Circle{Point c;double r;Circle() {}Circle(Point c,double r): c(c),r(r) {}
};
Vector operator + (Vector A , Vector B){return Vector(A.x+B.x,A.y+B.y);}
Vector operator - (Vector A , Vector B){return Vector(A.x-B.x,A.y-B.y);}
Vector operator * (double p,Vector A){return Vector(A.x*p,A.y*p);}
Vector operator / (Vector A , double p){return Vector(A.x/p,A.y/p);}bool operator < (const Point& a,const Point& b){return a.x < b.x ||( a.x == b.x && a.y < b.y);
}int dcmp(double x){if(fabs(x) < eps) return 0;else              return x < 0 ? -1 : 1;
}
bool operator == (const Point& a, const Point& b){return dcmp(a.x - b.x) == 0 && dcmp(a.y - b.y) == 0;
}///向量(x,y)的极角用atan2(y,x);
inline double Dot(Vector A, Vector B){ return A.x*B.x + A.y*B.y; }
inline double Length(Vector A)    { return sqrt(Dot(A,A)); }
inline double Angle(Vector A, Vector B)  { return acos(Dot(A,B) / Length(A) / Length(B)); }
double Cross(Vector A, Vector B)  { return A.x*B.y - A.y * B.x; }
Vector vecunit(Vector v){ return v / Length(v);} //单位向量

Point read_point(){Point A;scanf("%lf %lf",&A.x,&A.y);return A;
}//多边形
//求面积
double PolygonArea(Point* p,int n){   //n个点double area = 0;for(int i=1;i<n-1;i++){area += Cross(p[i]-p[0],p[i+1]-p[0]);}return area/2;
}/*************************************分 割 线*****************************************/int main()
{//freopen("E:\\acm\\input.txt","r",stdin);
Point O,P[155];double R;while(scanf("%lf %lf %lf",&O.x,&O.y,&R) == 3  && dcmp(R)>0){int N;cin>>N;int cnt = 0;for(int i=1;i<=N;i++){Point temp = read_point();double len = Length(temp-O);if(dcmp(len-R) > 0) continue;P[++cnt] = temp;}int ans = 0;for(int i=1; i<=cnt; i++){if(P[i] == O){ans = max(ans,1);continue;}int lnum = 1;int rnum = 1;Vector v = P[i] - O;v = (-1.0)*vecunit(v);Point T = O + R*v;for(int j=1; j<=cnt; j++){if(i == j) continue;if(dcmp(Cross(P[j]-T,O-T)) > 0 )      lnum++;else if(dcmp(Cross(P[j]-T,O-T)) == 0) lnum++,rnum++;else                                  rnum++;}int num = max(lnum,rnum);ans = max(ans,num);}printf("%d\n",ans);}
}

View Code

转载于:https://www.cnblogs.com/acmdeweilai/p/3352748.html

poj 1106 Transmitters (枚举+叉积运用)相关推荐

  1. POJ 1106 Transmitters(计算几何)

    题目链接 切计算几何,感觉计算几何的算法还不熟.此题,枚举线段和圆点的直线,平分一个圆 1 #include <iostream> 2 #include <cstring> 3 ...

  2. #叉积#zoj 1041 poj 1106 ssl 1232 雷达覆盖问题 Transmitters

    题目 以雷达心为圆心的半圆形雷达覆盖范围有多个点 雷达可旋转,求最多覆盖数(含在边界的) 分析 首先如果超过了范围,首先肯定是不可以的,再而可以枚举一个合法的点,那么这个点与雷达心所在的直线上正好把圆 ...

  3. 叉积求点在直线的一侧 poj 1106

    传送门 题目大意,让我们从源点,半径为r,可任意旋转的半圆中最多能包含多少个点. 发射台为p0,以p0为轴心,可向任意方向旋转,所以我们将任一点pi与p0间的直线都作为半圆的下边界,再枚举所有点,则位 ...

  4. poj 2318 TOYS amp; poj 2398 Toy Storage (叉积)

    链接:poj 2318 题意:有一个矩形盒子,盒子里有一些木块线段.而且这些线段坐标是依照顺序给出的. 有n条线段,把盒子分层了n+1个区域,然后有m个玩具.这m个玩具的坐标是已知的,问最后每一个区域 ...

  5. POJ 3174 暴力枚举

    思路: 暴力枚举三个点 判一判 搞定 (x1*y1=x2*y2) x1.y1.x2.y2为他们两两的差 //By SiriusRen #include <cstdio> using nam ...

  6. Rochambeau POJ - 2912 (枚举和加权并查集+路径压缩)找唯一裁判

    题意:有n个人玩石头剪刀布,有且只有一个裁判.除了裁判每个人的出拳形式都是一样的. a<b表示b打败a,a=b表示a和b出拳一样,平手.a>b表示a打败b. 给出m个回合的游戏结果,问能否 ...

  7. POJ 计算几何入门题目推荐

      其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中.之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的算法,在很多领域有着重要的用途(例如本人的专 ...

  8. [Z]POJ 计算几何入门题目推荐[转PKKJ]

    http://www.cnblogs.com/eric-blog/archive/2011/05/31/2064785.html http://hi.baidu.com/novosbirsk/blog ...

  9. poj计算几何题推荐

    POJ 计算几何入门题目推荐(转)       其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中.之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的 ...

最新文章

  1. tee 和 ree分别是什么意思?
  2. 区块链在天猫国际商品溯源中的应用
  3. cuda-convnet2编译
  4. 谁是最好的WebRTC SFU?
  5. D. Salary Changing(二分,前缀和,贪心,瞎搞)
  6. 【Jetson-Nano】2.Tensorflow object API和Pytorch的安装
  7. python向自己qq邮箱发信息_python 向qq邮箱发邮件
  8. linux 限额系统,Linux磁盘限额(quota)
  9. CUDA内存分配、释放、传输,固定内存
  10. AWS AI网络研讨会 - Data Lab案例分享
  11. SSH登录到远程linux机器并执行命令
  12. 微信朋友圈装x代码_微信朋友圈装逼教程,微信小程序怎么制作“朋友圈”信息...
  13. 笔记本电脑WIFI图标消失解决方案大全,无WIFI图标也能自由连WIFI上网。
  14. 360修复服务器漏洞,360安全漏洞不需要修复怎么设置
  15. Web登录如何确保安全
  16. is not eligible for getting processed by all BeanPostProcessors 导致找不到路径报404
  17. 用数字描绘中国互联网20年变迁
  18. 2022-2027年中国煤制尿素行业市场全景评估及发展战略规划报告
  19. java逻辑值_java、 若x = 5,y = 10,则x y和x = y的逻辑值分别为 和 。...
  20. house-robber-iii

热门文章

  1. 从敲入 URL 到浏览器渲染完成、对HTTP协议的理解
  2. Django form表单
  3. js hoisting -- 提升 学习笔记
  4. WebClient DownloadFile 用法
  5. 对于百川SDK签名验证的问题
  6. js发送邮件确定email地址
  7. CDOJ_327 BerOS file system
  8. Hello World!!
  9. 小技巧之chm文件无法显示
  10. ECMA262 Edition5 Object,Object的属性和方法,Object.prototype的方法.