Poj 1106 Transmitters
Poj 1106 Transmitters
给出一个半圆,可以任意旋转,问这个半圆能够覆盖的最多点数。
我们枚举每一个点作为必然覆盖点,那么使用叉积看极角关系即可判断其余的点是否能够与其存在一个半圆内
import java.io.*;
import java.util.*;
public class Main {
static class Point implements Comparable<Point> {
double x, y;
@Override
public int compareTo(Point a) {
return (int) cross(a);
}
public double cross(Point a) {
return a.x * y - x * a.y;
}
}
static double cross(Point st, Point a, Point b) {
return (a.x - st.x) * (b.y - st.y) - (b.x - st.x) * (a.y - st.y);
}
static double dist(Point a1, Point a2) {
return (a1.x - a2.x) * (a1.x - a2.x) + (a1.y - a2.y) * (a1.y - a2.y);
}
static final int N = 10005;
static final int inf = 0x3f3f3f3f;
static final double eps = 1e-9;
static Point a[] = new Point[N];
public static void main(String[] args) {
Scanner cin = new Scanner(new InputStreamReader(System.in));
while (cin.hasNext()) {
Point st = new Point(), tmp = new Point();
st.x = cin.nextDouble();
st.y = cin.nextDouble();
double r = cin.nextDouble();
double d;
int n = cin.nextInt();
int cnt = 0;
for (int i = 0; i < n; i++) {
tmp.x = cin.nextDouble();
tmp.y = cin.nextDouble();
d = dist(st, tmp);
if (d < r * r || Math.abs(d - r * r) < eps) {
cnt++;
if (a[cnt] == null)
a[cnt] = new Point();
a[cnt].x = tmp.x;
a[cnt].y = tmp.y;
}
}
int ans = 0;
for (int i = 1; i <= cnt; i++) {
int count = 1;
for (int j = 1; j <= cnt; j++) {
if (i != j && cross(st, a[i], a[j]) <= 0)
count++;
}
if (count > ans)
ans = count;
}
System.out.println(ans);
}
cin.close();
}
}
Poj 1106 Transmitters的更多相关文章
- poj 1106 Transmitters (叉乘的应用)
http://poj.org/problem?id=1106 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4488 A ...
- poj 1106 Transmitters (枚举+叉积运用)
题目链接:http://poj.org/problem?id=1106 算法思路:由于圆心和半径都确定,又是180度,这里枚举过一点的直径,求出这个直径的一个在圆上的端点,就可以用叉积的大于,等于,小 ...
- POJ 1106 Transmitters(计算几何)
题目链接 切计算几何,感觉计算几何的算法还不熟.此题,枚举线段和圆点的直线,平分一个圆 #include <iostream> #include <cstring> #incl ...
- poj 1106(半圆围绕圆心旋转能够覆盖平面内最多的点)
Transmitters Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4955 Accepted: 2624 Desc ...
- POJ 1106
先判断是否在圆内,然后用叉积判断是否在180度内.枚举判断就可以了... 感觉是数据弱了.. #include <iostream> #include <cstdio> #in ...
- [转] POJ计算几何
转自:http://blog.csdn.net/tyger/article/details/4480029 计算几何题的特点与做题要领:1.大部分不会很难,少部分题目思路很巧妙2.做计算几何题目,模板 ...
- ACM计算几何题目推荐
//第一期 计算几何题的特点与做题要领: 1.大部分不会很难,少部分题目思路很巧妙 2.做计算几何题目,模板很重要,模板必须高度可靠. 3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面 ...
- poj1106 Transmitters
地址:http://poj.org/problem?id=1106 题目: Transmitters Time Limit: 1000MS Memory Limit: 10000K Total S ...
- 【解题报告】POJ-1106 Transmitters
原题地址:http://poj.org/problem?id=1106 题目大意: 给定一些平面的点以及一个圆心和半径,过圆心作一个半圆,求点在半圆中点最多多少个. 解题思路: 首先将给定点中和圆心的 ...
随机推荐
- ls -l 详解
ls -l 是文件系统的一个命令,用来查询当前路径的文件的属性.大小等详细信息
- C语言之图像旋转
最近用到了图像向左或者向右旋转90°的情况,纠结了好一会儿,写下来供大家参考. 1 向左旋转90° //unsigned char *pImgData: 输入图像指针 //int WidthIn, i ...
- 关于tomcat一些简介
window下,在tomcat的bin目录下,用cmd输入startup.bat 即可启动tomcat 成功启动Tomcat后,通过访问http://localhost:8080/便可以使用Tomca ...
- SSM学习
一.https://www.cnblogs.com/zyw-205520/p/4771253.html 二.https://blog.csdn.net/dwhdome/article/details/ ...
- 构建微服务开发环境5————安装Node.js
[内容指引] 下载Node.js: Mac下安装Node.js: Windows下安装Node.js; 查看node和npm的版本. 一.下载Node.js 访问Node.js官网:https://n ...
- Oracle Mysql的jdbc连接
Oracle和MySql的jdbc或连接池中的连接,写下来以便随时参考 Oracle: driverClassName=oracle.jdbc.driver.OracleDriver url=jdbc ...
- Elasticsearch--集群&吞吐量
目录 高查询和高吞吐量 过滤器缓存 字段数据缓存和断路器 断路器 存储模块 索引缓冲和刷新率 索引刷新率 线程池的配置 一些通用的建议来配置高索引和查询吞吐量的集群 高查询和高吞吐量 过滤器缓存 过滤 ...
- Python学习 Day 9 property 多重继承 Mixin
在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9999 为了限制score的范围,可以通过一 ...
- iOS 蓝牙的GameKit用法
一.连接蓝牙 显示可以连接的蓝牙设备列表 - (IBAction)buildConnect:(id)sender { // 创建弹窗 GKPeerPickerController *ppc = [[G ...
- vue2.0 vue.set()
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...