hdu2469(计算几何)
枚举所有可能的半径,然后将所有满足这个半径的点按角度(与x轴正半轴的夹角)排序。 然后一遍扫描求出在这个半径下选k个点所需的最小面积 。
思路还是比较简单,实现略有些繁琐。
要先将点的坐标转换为角度。 如果用斜率的方法的话有些繁琐。
Fire-Control System
Time Limit: 12000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2047    Accepted Submission(s): 350
The following example gives an example of a firing solution:
Figure 1

Here the firing region is the sector "ABC" that covers six points: A, B, C, D, E, H. You may further assume that the weapon is always located at point (0, 0), no targets will be on the point (0, 0) and the coordinates of the targets will be distinct.
A firing solution is called effective if and only if it covers a minimum of K points
out of N given points (targets) on the two-dimensional Cartesian plane. Furthermore,since the cost of a particular fire solution is in direct proportion to the size of the area it covers, a firing could be quite costly; thus we are only interested in the optimal firing solution with the minimum cost.
Each test case starts with two non-negative integers, N and K
(1 ≤ N ≤ 5000 , K ≤ N ), followed by N lines each containing two integers, X, and Y, describing the distinct location of one target. It is guaranteed that the absolute value of any integer does not exceed 1000.
Two successive test cases are separated by a blank line. A case with N = 0 and K = 0 indicates the end of the input file, and should not be processed by your program.
format as indicated in the sample output.
0 1
1 0
-5 -6
3 2
0 2
2 0
-5 -6
0 0
Case #2: 3.14
#include <iostream>
#include <stdio.h>
#include <queue>
#include <algorithm>
#include <math.h>
#include <string.h>
using namespace std;
#define N 100100
#define PI (2*asin(1.0)) struct node
{
int x,y;
double r;//表示半径
double du;//用来表示角度
}g[N]; int n,k;
double g1[N]; int cmp(node t,node t1)
{
return t.du<t1.du;
} double que[*N]; double mabs(double x)
{
if(x<) return -x;
return x;
} int main()
{
//freopen("//home//ismdeep//xianchang1//in","r",stdin);
int tt=;
double pi=PI;
while(scanf("%d%d",&n,&k)&&(n+k))
{ for(int i=;i<=n;i++)
{
scanf("%d%d",&g[i].x,&g[i].y);
g[i].r=sqrt((double)g[i].x*g[i].x+g[i].y*g[i].y);
g1[i]=g[i].r; double tmp; if(mabs(g[i].x-)<1e-)
{
if(g[i].y>) tmp=90.0;
else tmp=270.0;
}
else
{
tmp=((double)g[i].y/(double)g[i].x); //将这个点的斜率求出来
if(mabs(g[i].y-)<1e-)
{
if(g[i].x>) tmp=0.0;
else tmp=180.0;
}
else
{
tmp=atan(tmp);//求出角度
tmp=(180.0/PI)*tmp;
if(g[i].y*g[i].x > &&g[i].y<)
tmp+=180.0;
if(g[i].y*g[i].x<)
{
tmp*=-;
if(g[i].x<)
tmp=180.0-tmp;
else
{
tmp=-tmp;
}
} }
}
g[i].du=tmp;
}
// 角度求好了
if(k==)
{
printf("Case #%d: 0.00\n",tt++);
continue;
}
//sort(g1+1,g1+n+1); //半径从小到大来搞一搞啊
sort(g+,g++n,cmp); double mi=; for(int ii=;ii<=n;ii++)
{
double key=g1[ii]; //表示固定的半径
int flag=; for(int i=;i<=n;i++)//提前
{
if(g[i].r <= key+1e-)
{
que[flag++]=g[i].du;
}
} for(int i=;i<flag;i++)
{
que[flag+i] = que[i]+360.0;
} if(flag<k) continue; for(int i=;i<flag;i++)
{
double tmp=que[i];
int tt=i+k-;
double tmp1=que[tt];
tmp=tmp1-tmp; tmp=(tmp/(360.0))*PI*key*key; mi=min(tmp,mi);
}
} printf("Case #%d: ",tt++); printf("%.2lf\n",mi);
}
return ;
}
hdu2469(计算几何)的更多相关文章
- ACM/ICPC 之 计算几何入门-叉积-to left test(POJ2318-POJ2398)
		POJ2318 本题需要运用to left test不断判断点处于哪个分区,并统计分区的点个数(保证点不在边界和界外),用来做叉积入门题很合适 //计算几何-叉积入门题 //Time:157Ms Me ... 
- HDU 2202 计算几何
		最大三角形 Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ... 
- ACM 计算几何中的精度问题(转)
		http://www.cnblogs.com/acsmile/archive/2011/05/09/2040918.html 计算几何头疼的地方一般在于代码量大和精度问题,代码量问题只要平时注意积累模 ... 
- hdu 2393:Higher Math(计算几何,水题)
		Higher Math Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ... 
- sdut 2603:Rescue The Princess(第四届山东省省赛原题,计算几何,向量旋转 + 向量交点)
		Rescue The Princess Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 Several days ago, a b ... 
- [知识点]计算几何I——基础知识与多边形面积
		// 此博文为迁移而来,写于2015年4月9日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vxaq.html 1.前言 ... 
- POJ 1106 Transmitters(计算几何)
		题目链接 切计算几何,感觉计算几何的算法还不熟.此题,枚举线段和圆点的直线,平分一个圆 #include <iostream> #include <cstring> #incl ... 
- TYVJ计算几何
		今天讲了计算几何,发几道水水的tyvj上的题解... 计算几何好难啊!@Mrs.General....怎么办.... 这几道题都是在省选之前做的,所以前面的Point运算啊,dcmp啊,什么什么的,基 ... 
- 计算几何 平面最近点对 nlogn分治算法 求平面中距离最近的两点
		平面最近点对,即平面中距离最近的两点 分治算法: int SOLVE(int left,int right)//求解点集中区间[left,right]中的最近点对 { double ans; //an ... 
随机推荐
- 一款基于Netty开发的WebSocket服务器
			代码地址如下:http://www.demodashi.com/demo/13577.html 一款基于Netty开发的WebSocket服务器 这是一款基于Netty框架开发的服务端,通信协议为We ... 
- 【ajax+php】动态展示4级单位(省、市、县、镇)
			1.本篇教程以ajax+php动态展示[省.市.县.镇]四级地区单位 2.效果图: 3.不废话,贴代码! HTML: <div class="form-group"&g ... 
- 单例模式的Oracle 数据库连接应用
			新建一个类来实现单例模式的Oracle 数据库连接应用 组织架构如下: 类的具体代码如下: package com.zse.dba; import java.sql.*; //设计模式1:单例模式.保 ... 
- 百度地图和高德地图坐标系的互相转换  四种Sandcastle方法生成c#.net帮助类帮助文档  文档API生成神器SandCastle使用心得  ASP.NET Core
			百度地图和高德地图坐标系的互相转换 GPS.谷歌.百度.高德坐标相互转换 一.在进行地图开发过程中,我们一般能接触到以下三种类型的地图坐标系: 1.WGS-84原始坐标系,一般用国际GPS纪录仪记 ... 
- 【ASP.NET MVC系列】详解View
			本篇文章内容属于ASP.NET MVC系列视图篇,主要讲解View,大致内容如下: 1.Views文件夹讲解 2.View种类 3.Razor语法 4.对视图的基本操作 一 Views文件夹 (一 ... 
- atitit.javascript js 上传文件的本地预览
			atitit.javascript js 上传文件的本地预览 1. .URL.createObjectURL 1 1.1. 吊销所有使用 URL.createObjectURL 而创建的 URL,以 ... 
- Yii2中对数据库的查询方法如下
			User::find()->all(); 此方法返回所有数据: User::findOne($id); 此方法返回 主键 id=1 的一条数据(举个例子): User::find()->w ... 
- 日期在苹果手机上显示NaN的处理方法
			注意两点即可: 1.苹果只认识 yyyy/mmmm/dddd/ 这类格式的日期 2.如果输出后还要进行处理日期对比,苹果默认会带中文字,如:年月日,需要转成上面1当中的日期格式在转时间戳进行比较 G ... 
- python 同时遍历多个变量
			最近在用python的时候,用到遍历多个变量: import sys import math F58=11491939491.7 F=[11429229079.7,11374540753.7,1132 ... 
- MySQL 行号(类似SQLServer的row_number())
			Select ID,(@rowNum:=@rowNum+1) as RowNo From a,(Select (@rowNum :=0) ) b 
