/*
translation:
给出若干个点的位置,求一个半径为1的圆最多能够覆盖多少个点?
solution:
极限情况
先枚举两个点,假设这两个点恰好在圆上。然后计算这个圆包含的点个数即可。
note:
* 还有一种更为高效的写法,枚举一个点,假设该点在圆x上,则圆心必然在以该点为圆心的圆i上。此时x要覆盖尽量多的点,
所以对以枚举的点为圆心的圆求出和其他点为圆心的圆的交点,被覆盖最多次的那段弧就是圆x圆心所在的位置。
*/
#include <iostream>
#include <cstdio>
#include <vector>
#include <cmath>
using namespace std;
const int maxn = 300 + 5;
struct Point
{
double x, y;
Point(){}
Point(double x_, double y_):x(x_),y(y_){}
};
typedef Point Vector;
struct Circle
{
Point c;
double r;
Circle(Point c, double r):c(c),r(r){}
Point point(double a) {
return Point(c.x + cos(a) * r, c.y + sin(a) * r);
}
};
Vector operator + (Vector a, Vector b) { return Vector(a.x + b.x, a.y + b.y); }
Vector operator - (Point a, Point b) { return Point(a.x - b.x, a.y - b.y); }
Vector operator * (Vector a, double p) { return Vector(a.x * p, a.y * p); }
Vector op
poj1981(几何极限情况)
最新推荐文章于 2019-09-25 13:59:28 发布
该博客探讨了一种算法,用于解决在给定点集中,一个半径为1的圆能覆盖最多多少个点的问题。通过枚举两个点作为圆的边界,并计算包含的点数,找到覆盖最多的解决方案。文章还提到了更高效的算法,通过枚举一个点,确定圆心位置以覆盖最多点。最后,博客提供了C++代码实现。
摘要由CSDN通过智能技术生成