`
scott________
  • 浏览: 21579 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
最近访客 更多访客>>
社区版块
存档分类
最新评论

poj pku 1981 Circle and Points 点与圆 位置关系

阅读更多
  • 题目描述: http://poj.org/problem?id=1981
  • 题目大意: 给定n 个点的坐标, 求单位圆最多可以覆盖(包括在圆上)多少个点.
  • 题目分析: 假设某单位圆能覆盖最多点, 可以右移该单位圆, 使得恰有两个点(或更多)在圆上.   所以思路是,枚举以任意两点,以及半径为1 所确定的圆(有两个,总是选圆心在右, 或在左的那个圆)即可.
#include <iostream>
#include <cmath>
using namespace std;

#define eps 1e-6

struct Point {
	double x, y;
	Point() {
		x = y = 0.00;
	}
};

//返回两点间距
double dist(Point p1, Point p2) {
	return sqrt( (p1.x - p2.x) * (p1.x - p2.x) +
		(p1.y - p2.y) * (p1.y - p2.y) );
}
//判断点在圆内(包括圆上)
bool dot_on_in_circle(Point p, Point c, double r) {
		  return (dist(p, c) < r + eps);
}
//返回p1, p2, 以及半径1, 所确定的圆的圆心(只是其中一个圆心)
//保证dist(p1, p2) <= 2.0
Point circle(Point p1, Point p2) {
	Point mid, ret;
		  mid.x = (p1.x + p2.x) / 2;
		  mid.y = (p1.y + p2.y) / 2;
		  
		  double a = dist(p1, mid);
		  double d = sqrt(1.0 - a * a);
		  
		  if(fabs(p1.x - p2.x) <= eps) {
			  ret.x = mid.x + d;
			  ret.y = mid.y;
			  return ret;
		  }
		  
		  double alpha = atan((p1.y - p2.y) / (p1.x - p2.x));
		  //double alpha = atan(a / d);
		  
		  ret.x = mid.x + d * sin(alpha);
		  ret.y = mid.y - d * cos(alpha);
		  return ret;
}

int main() {
	//freopen("in.txt", "r", stdin);
	
	int n, i, j, k, count, max;
	Point dot[305], cent;
	while(scanf("%d", &n) != EOF && n) {
		max = 1;
		for(i = 0; i < n; i++)
			scanf("%lf %lf", &dot[i].x, &dot[i].y);
		
		for(i = 0; i < n; i++) {
			for(j = i + 1; j < n; j++) {
				if(dist(dot[i], dot[j]) > 2.0)
					continue;
				
				count = 0;
				cent = circle(dot[i], dot[j]);
				for(k = 0; k < n; k++) {
					if(dot_on_in_circle(dot[k], cent, 1.0))
						count++;
				}
				if(count > max)
					max = count;
			}
		}
		printf("%d\n", max);
	}
	return 0;
}
分享到:
评论

相关推荐

    ACM POJ PKU 最全题目分类

    ### ACM POJ PKU 最全题目分类解析 #### 动态规划(DP) 在计算机科学领域,动态规划(Dynamic Programming, DP)是一种重要的算法思想,主要用于解决多阶段决策过程中的优化问题。它通过将原问题分解成相互重叠的...

    ACM Poj Pku 解题报告答案 打包 下载 600多题 史上最全

    ACM Poj Pku 解题报告答案 打包 下载 600多题 史上最全 不是网上乱传的200多题,更不是100多题就挂着10分才能下的题 下了这个 大家也不要浪费分数去下载其它版本的了,基本上都有 共享 一起进步 中国加油 ACMer...

    poj pku图论、网络流入门题总结、汇总

    根据提供的标题“poj pku图论、网络流入门题总结、汇总”及描述“很经典的图论,网络流入门的题目,值得一看啊~~其中有简单的解析”,本篇将对这些经典图论与网络流问题进行详细的分析和总结。通过梳理各题目及其...

    poj pku 解题报告

    1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1011 1012 1013 1014 1015 1017 1018 1019 1028 1032 1035 1040 1042 1045 1046 1047 1050 1056 1061 1062 1063 1065 1067 1068 1080 1083 1088 1089 1091 1094 ...

    poj(PKU-2314-POJ language

    通过这种方式,代码实现了对POJ 2314题目的求解策略,特别是对于涉及到变量赋值与表达式计算的题目非常有用。 总体来说,这份代码示例展示了如何使用面向对象的方法来构建一个简单但功能强大的表达式处理系统,对于...

    poj 130题 acm pku

    【标题】"poj 130题 acm pku" 涉及的是ACM(国际大学生程序设计竞赛)中的PKU(北京大学)在线判题系统POJ(Problem Online Judge)的相关题目。ACM/ICPC(International Collegiate Programming Contest)是全球...

    POJ PKU 必做题+部分难题1001-2500

    1011,1012,1013,1014,1015,1017,1026,1028,1032,1035,1041,1046,1129 1149 1154 1165 1182 1185 1190 1191 1201 1251 1273 1275 1276 1286 1322 1338 1363 1364 1401 1456 1459 1564 1579 1637 1657 1658 ...

    PKU_poj 1197

    ACM PKU_poj 1197 仓库问题源代码,愿与大家共享。若谁更好的代码,多谢提供。

    pku(poj)--2494--Acid Text--java代码

    根据给定的文件信息,我们可以总结出以下关于POJ(PKU)问题2494“Acid Text”以及其Java代码实现的关键知识点: ### 1. POJ(PKU)2494:Acid Text POJ(Peking University Online Judge)是北京大学的一个在线...

    pku1088.rar_pku 10_pku 1088_poj 1088

    标题中的“pku1088.rar_pku 10_pku 1088_poj 1088”指的是北京大学(Peking University, PKU)编程竞赛中的第1088题,也称为POJ(Peking University Online Judge)的1088题。这个题目在编程竞赛社区中通常有一个特定的...

    pku1151.rar_Atlantis_pku 11_poj Atlant_poj Atlantis_poj11

    标题中的“pku1151.rar_Atlantis_pku 11_poj Atlant_poj Atlantis_poj11”似乎是指北京大学(Peking University, PKU)编程竞赛中的一道题目,编号为1151,与“Atlantis”这个主题相关。这道题目在多个平台上也被提及...

    POJ.rar_pku ac_pku.1050

    标题中的"POJ.rar_pku ac_pku.1050"暗示了这是一个与北京大学(Peking University, 简称PKU)编程竞赛相关的压缩文件,其中包含了作者通过验证(Passed All Cases, 简称AC)的代码,具体是针对PKU题目编号1050的问题。...

    PKU_poj 1001~1009

    标题“PKU_poj 1001~1009”揭示了这是一组与北京大学(Peking University)编程竞赛平台POJ相关的解决方案。在这个压缩包中,包含了从问题1001到1009的C++源代码,表明这些代码已经过验证并成功解决了对应的算法问题。...

    poj3252.rar_pku 3252_poj32

    标题中的"poj3252.rar_pku 3252_poj32"表明这是一个与编程竞赛相关的资源,具体来说是北京大学(PKU)ACM竞赛中的问题3252。"poj"通常指的是"Programming Online Judge",这是一个在线编程比赛平台,而"Pku"则代表...

    PKU POJ 1162 Building with Blocks解题报告

    ### PKU POJ 1162 Building with Blocks 解题报告 #### 题目概述 本题名为“Building with Blocks”,属于经典的积木搭建问题。题目要求利用一定数量的基本单位积木,搭建出特定的三维形状。积木的种类不超过12种,...

    pku_poj_2187.rar_poj 2187_凸包问题

    标题中的“pku_poj_2187.rar_poj 2187_凸包问题”表明这是一个关于北京大学(Peking University, PKU)编程竞赛平台POJ上的第2187题,题目主要涉及凸包问题。描述中的“O(nlogn)凸包问题 poj2187”提示我们解决这个...

    PKU 、POJ ACM/ICPC300多题的代码

    标题“PKU 、POJ ACM/ICPC300多题的代码”指的是北京大学(PKU)和编程在线评测平台POJ上收集的300多道ACM/ICPC(国际大学生程序设计竞赛)比赛题目解题代码。这个压缩包包含了解决这些竞赛问题的算法和程序实现,是...

    poj 2403 Hay Points.md

    poj 2403 Hay Points.md

    pku poj 2406

    #include using namespace std; #define M 1000000 char t[M+1],p[M+1]; int lent,lenp; bool kmp(char *t,char *p) { int i,j; for(i=lenp,j=0;i;i++) { if(t[i]!=p[j]) return false;...}

    poj很多难题的源代码...

    【标题】"poj很多难题的源代码..." 涉及的知识点主要集中在算法和编程实践上,这里的“poj”通常是指北京大学的在线判题系统“Programming Online Judge”,它是国内较早的编程竞赛平台之一,吸引了众多程序员进行...

Global site tag (gtag.js) - Google Analytics