博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
M - Geometry Problem HDU - 6242
阅读量:4114 次
发布时间:2019-05-25

本文共 1242 字,大约阅读时间需要 4 分钟。

题意:给你n个点,让你找出一个点让至少存在n/2个点到这个点的距离为r,输出点的坐标和r。

思路:这个题目中点的个数为1e5,比赛的时候一直都不知道该怎么做,一点思路都没有,感觉不管枚举什么复杂度都很高,赛后才知道这个可以用随机程序完成这个题目,平时也没有怎么做过随机数的题目。我们可以随机枚举三个点,然后通过三个点确定一个圆,确定出圆的圆心,在判断这个圆是否满足要求即可,在求三角形外接圆的时候,可以通过距离方程完成,设圆心的坐标,三个点到圆心的距离相同,解方程即可。 

#include
using namespace std;const int maxn=1e5+50;struct Point{ double x,y; Point() {} Point (double a,double b) { x=a; y=b; }} p[maxn];double dis(int a,int b){ return sqrt((p[a].x-p[b].x)*(p[a].x-p[b].x)+(p[a].y-p[b].y)*(p[a].y-p[b].y));}Point heart(int a,int b,int c){ double a1=p[b].x-p[a].x; double b1=p[b].y-p[a].y; double c1=(p[b].x*p[b].x+p[b].y*p[b].y-p[a].x*p[a].x-p[a].y*p[a].y)/2; double a2=p[c].x-p[b].x; double b2=p[c].y-p[b].y; double c2=(p[c].x*p[c].x+p[c].y*p[c].y-p[b].x*p[b].x-p[b].y*p[b].y)/2; double x=(b2*c1-b1*c2)/(a1*b2-a2*b1); double y=(c1*a2-a1*c2)/(b1*a2-a1*b2); return Point(x,y);}int main(){ int T; scanf("%d",&T); while(T--) { int n; scanf("%d",&n); for(int i=0; i
=n) { printf("%lf %lf %lf\n",h.x,h.y,dis(n,a)); break; } } } }// cout << "Hello world!" << endl; return 0;}

 

转载地址:http://wdgsi.baihongyu.com/

你可能感兴趣的文章
phpstorm 集成 xdebug 进行调试
查看>>
npm和node升级的正确方式
查看>>
laravel事务
查看>>
springcloud 连续请求 500
查看>>
vue复用新增和编辑表单
查看>>
Ubuntu 16.04 apt-get更换为国内阿里云源
查看>>
laravel部署到宝塔步骤
查看>>
小程序获取access_token
查看>>
navicat远程连接mysql数据库
查看>>
tp5令牌数据无效 解决方法
查看>>
自己的网站与UCenter整合(大致流程)
查看>>
laravel 制作通用的curd 后台操作
查看>>
【小红书2017年笔试】求一个数组中平均数最大的子数组
查看>>
Linux基础系列-定时器与时间管理
查看>>
Linux基础系列-可执行程序的产生过程
查看>>
Linux基础系列-Kernel 初始化宏
查看>>
Linux子系统系列-I2C
查看>>
<iOS>关于自定义description的一点用法
查看>>
Unix 命令,常用到的
查看>>
DLL中建立进程共享数据段需要注意的语法问题
查看>>