枚举所有可能的半径,然后将所有满足这个半径的点按角度(与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

Problem Description
A new mighty weapon has just been developed, which is so powerful that it can attack a sector of indefinite size, as long as the center of the circle containing the sector is the location of the weapon. We are interested in developing a fire-control system that calculates firing-solutions automatically.
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.
 
Input
There are multiple test cases in the input file.
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.
 
Output
For each test case, please print the required size (to two decimal places), in the
format as indicated in the sample output.
 
Sample Input
3 1
0 1
1 0
-5 -6
3 2
0 2
2 0
-5 -6
0 0
 
Sample Output
Case #1: 0.00
Case #2: 3.14
 
Source
 
Recommend
lcy
 
#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(计算几何)的更多相关文章

  1. ACM/ICPC 之 计算几何入门-叉积-to left test(POJ2318-POJ2398)

    POJ2318 本题需要运用to left test不断判断点处于哪个分区,并统计分区的点个数(保证点不在边界和界外),用来做叉积入门题很合适 //计算几何-叉积入门题 //Time:157Ms Me ...

  2. HDU 2202 计算几何

    最大三角形 Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  3. ACM 计算几何中的精度问题(转)

    http://www.cnblogs.com/acsmile/archive/2011/05/09/2040918.html 计算几何头疼的地方一般在于代码量大和精度问题,代码量问题只要平时注意积累模 ...

  4. hdu 2393:Higher Math(计算几何,水题)

    Higher Math Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  5. sdut 2603:Rescue The Princess(第四届山东省省赛原题,计算几何,向量旋转 + 向量交点)

    Rescue The Princess Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Several days ago, a b ...

  6. [知识点]计算几何I——基础知识与多边形面积

    // 此博文为迁移而来,写于2015年4月9日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vxaq.html 1.前言 ...

  7. POJ 1106 Transmitters(计算几何)

    题目链接 切计算几何,感觉计算几何的算法还不熟.此题,枚举线段和圆点的直线,平分一个圆 #include <iostream> #include <cstring> #incl ...

  8. TYVJ计算几何

    今天讲了计算几何,发几道水水的tyvj上的题解... 计算几何好难啊!@Mrs.General....怎么办.... 这几道题都是在省选之前做的,所以前面的Point运算啊,dcmp啊,什么什么的,基 ...

  9. 计算几何 平面最近点对 nlogn分治算法 求平面中距离最近的两点

    平面最近点对,即平面中距离最近的两点 分治算法: int SOLVE(int left,int right)//求解点集中区间[left,right]中的最近点对 { double ans; //an ...

随机推荐

  1. Struts2中防止表单重复提交,global-results定义全局结果处理

    1.在表单中加入<s:token/>标签 2.在动作类中加入token的拦截器 <!--如果单单写 name="token" 会丧失 defaultStack 拦 ...

  2. iOS 键盘自适应(IQKeyboardManager)使用小结

    IQKeyboardManager Github地址 经常在开发一个应用程序,我们遇到了一个问题,iPhone的键盘上滑覆盖的UITextField / UITextView.IQKeyboardMa ...

  3. VSCode集成Git代码管理

    一.安装和配置VSCode与Git 1.下载Git并安装: https://git-scm.com/download/ 2.下载VSCode并进行安装: https://code.visualstud ...

  4. springboot常见异常解决方案

    1.@Transactional类注入失败 spring的代理模式有2种::java自带的动态代理模式和cglib代理模式,默认情况下使用的java自带的代理模式. 对于这2种模式,java自带的适用 ...

  5. scrapy抓取的中文结果乱码解决办法

    使用scrapy抓取的结果,中文默认是Unicode,无法显示中文. 中文默认是Unicode,如: \u5317\u4eac\u5927\u5b66 在setting文件中设置: FEED_EXPO ...

  6. 纯CSS3实现一个旋转的3D立方体盒子

    简单介绍 上网易前端微专业课程,里面有一个课外作业是实现一个3D旋转立方体.花了点时间做了下.还有点意思.写个简单教程.供大家学习. 先放上终于要实现的效果 注:代码在chrome 43.0.2357 ...

  7. poj1860--Currency Exchange

    Bellman-ford算法的反向应用--正循环检查 /** \brief poj 1860 Bellman-Ford * * \param date 2014/7/24 * \param state ...

  8. Openresty配置文件上传下载

    1. 下载包安装Openresty openresty-1.13.6.1下载地址 https://openresty.org/download/openresty-1.13.6.1.tar.gz 安装 ...

  9. lua 小技巧

    lua 小技巧 把常用的工具函数添加到 _G 里面,所有的文件都可以直接调用: ``` lua -- 在 a 文件中将工具函数添加到 _G: _G.IsEmptyStr = function(str) ...

  10. 【待完善】make: command not found,以及libtool.m4 and ltmain.sh have a version mismatch问题的解决方案

    之前为了使用一个库,都是去下载源码,然后根据开发者提供的README手动用GCC编译,一直不能使用Makefile感觉很蛋痛,比如最近使用的ZThread 还是怪自己以前过于依赖IDE 最近发现用Cy ...