POJ1981-Circle and Points(已知两点坐标求圆心坐标)
来源:互联网 发布:金庸群侠传x 原版数据 编辑:程序博客网 时间:2024/05/17 00:18
Circle and Points
Time Limit: 5000MS Memory Limit: 30000KTotal Submissions: 8100 Accepted: 2890Case Time Limit: 2000MS
Description
You are given N points in the xy-plane. You have a circle of radius one and move it on the xy-plane, so as to enclose as many of the points as possible. Find how many points can be simultaneously enclosed at the maximum. A point is considered enclosed by a circle when it is inside or on the circle.
Fig 1. Circle and Points
Fig 1. Circle and Points
Input
The input consists of a series of data sets, followed by a single line only containing a single character '0', which indicates the end of the input. Each data set begins with a line containing an integer N, which indicates the number of points in the data set. It is followed by N lines describing the coordinates of the points. Each of the N lines has two decimal fractions X and Y, describing the x- and y-coordinates of a point, respectively. They are given with five digits after the decimal point.
You may assume 1 <= N <= 300, 0.0 <= X <= 10.0, and 0.0 <= Y <= 10.0. No two points are closer than 0.0001. No two points in a data set are approximately at a distance of 2.0. More precisely, for any two points in a data set, the distance d between the two never satisfies 1.9999 <= d <= 2.0001. Finally, no three points in a data set are simultaneously very close to a single circle of radius one. More precisely, let P1, P2, and P3 be any three points in a data set, and d1, d2, and d3 the distances from an arbitrarily selected point in the xy-plane to each of them respectively. Then it never simultaneously holds that 0.9999 <= di <= 1.0001 (i = 1, 2, 3).
You may assume 1 <= N <= 300, 0.0 <= X <= 10.0, and 0.0 <= Y <= 10.0. No two points are closer than 0.0001. No two points in a data set are approximately at a distance of 2.0. More precisely, for any two points in a data set, the distance d between the two never satisfies 1.9999 <= d <= 2.0001. Finally, no three points in a data set are simultaneously very close to a single circle of radius one. More precisely, let P1, P2, and P3 be any three points in a data set, and d1, d2, and d3 the distances from an arbitrarily selected point in the xy-plane to each of them respectively. Then it never simultaneously holds that 0.9999 <= di <= 1.0001 (i = 1, 2, 3).
Output
For each data set, print a single line containing the maximum number of points in the data set that can be simultaneously enclosed by a circle of radius one. No other characters including leading and trailing spaces should be printed.
Sample Input
36.47634 7.696285.16828 4.799156.69533 6.2037867.15296 4.083286.50827 2.694665.91219 3.866615.29853 4.160976.10838 3.460396.34060 2.4159987.90650 4.017464.10998 4.183544.67289 4.018876.33885 4.283884.98106 3.827285.12379 5.164737.84664 4.676934.02776 3.87990206.65128 5.474906.42743 6.261896.35864 4.616116.59020 4.542284.43967 5.700594.38226 5.705365.50755 6.181637.41971 6.136686.71936 3.044965.61832 4.238575.99424 4.293285.60961 4.329986.82242 5.796835.44693 3.827246.70906 3.657367.89087 5.680006.23300 4.595305.92401 4.923296.24168 3.813896.22671 3.622100
Sample Output
25511
Source
Japan 2004 Domestic
题意:给你n个点的坐标,求出单位圆能覆盖的最多的点
解题思路:暴力枚举两个在圆上的点,然后在判断其它点能不能落在圆内
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> #include <cmath> #include <map> #include <set> #include <stack> #include <queue> #include <vector> #include <bitset> #include <functional> using namespace std;#define LL long long const int INF = 0x3f3f3f3f;struct point{double x, y;}p[400];double dis(point a, point b){return sqrt((a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y));}void get(point p1, point p2, point ¢er){point k;k.x = (p1.x + p2.x) / 2.0; k.y = (p1.y + p2.y) / 2.0;double angle = atan2(p1.x - p2.x, p2.y - p1.y);double dcm = sqrt(1 - dis(p1, k)*dis(p1, k));center.x = k.x + dcm*cos(angle); center.y = k.y + dcm*sin(angle);}int main(){int n;while (~scanf("%d", &n) && n){for (int i = 1; i <= n; i++) scanf("%lf%lf", &p[i].x, &p[i].y);int ma = 1;for (int i = 1; i <= n; i++){for (int j = i; j <= n; j++){if (i == j || dis(p[i], p[j])>2.0) continue;int sum = 2;point center;get(p[i], p[j], center);for (int k = 1; k <= n; k++){if (k == i || k == j) continue;if (dis(p[k], center)<1.0) sum++;}ma = max(ma, sum);}}printf("%d\n", ma);}return 0;}
阅读全文
0 0
- POJ1981-Circle and Points(已知两点坐标求圆心坐标)
- 已知两点坐标和半径求圆心坐标程序C++
- 已知圆上三点坐标求圆心
- POJ1981 Circle and Points(计算几何)
- 已知圆上三点坐标求圆心和半径
- 2017省选拔(二)poj1981 Circle and Points (数学)
- 已知三点坐标,求外接圆圆心坐标与半径。
- POJ 1981 Circle and Points(求半径R圆覆盖最多点数及由圆上两点和半径求圆心)
- poj1981 Circle and Points 计算几何
- 已知两点坐标求等边三角形另一点
- 已知等边三角形两点,求第三点坐标
- 已知圆弧上两点坐标及圆半径,计算圆心坐标
- 求内切圆的圆心和半径(已知三个点的坐标)
- 求内切圆的圆心和半径(已知三个点的坐标)
- 已知两点坐标,求两点连成的直线中的某一点坐标
- 2017 ACM/ICPC Asia Regional Qingdao Online 1001-Apple(Java大实数类BigDecimal应用)(已知三点坐标求圆心坐标和半径)
- 在圆内随机一个坐标点/已知圆心和点,求角度
- 在圆内随机一个坐标点/已知圆心和点,求角度
- Trie图-hihoCoder1036
- java集合框架由来
- CodeForces
- ACM基础题:6174问题
- [BZOJ]3052 糖果公园 树上带修改莫队
- POJ1981-Circle and Points(已知两点坐标求圆心坐标)
- css
- 视频播放与拍照
- Android——实现自定义播放视频,拍照
- 出行随带用品反馈
- 常用的JDBC驱动程序名称和数据库URL
- Spring访问数据库(oracle)配置
- 2017暑期集训Day 11 背包
- leetcode--26. Remove Duplicates from Sorted Array