BZOJ 3564 信号增幅仪
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3564
题意:给出平面上n个点,画出一个椭圆,椭圆的长轴是短轴的p倍,且长轴的方向为x轴逆时针旋转a度。求这个椭圆短轴的最小值使得可以覆盖所以点。
思路:先将所有点顺时针旋转a,然后所有点的x缩为原来的1/p。然后就是最小圆覆盖。
const int N=50005; struct point { double x,y; point(double _x=0,double _y=0) { x=_x; y=_y; } point operator-(point a) { return point(x-a.x,y-a.y); } point operator+(point a) { return point(x+a.x,y+a.y); } double operator*(point a) { return x*a.y-y*a.x; } point operator*(double t) { return point(x*t,y*t); } point operator/(double t) { return point(x/t,y/t); } point zhuan(double ang) { return point(x*cos(ang)+y*sin(ang),x*sin(ang)-y*cos(ang)); } point verl() { return point(-y,x); } }; point p[N]; int n; double dis(point a,point b) { return sqrt(sqr(a.x-b.x)+sqr(a.y-b.y)); } int sgn(double x) { if(x>1e-20) return 1; if(x<-1e-20) return -1; return 0; } point cross(point a,point b,point p,point q) { double s1=(q-a)*(p-a); double s2=(p-b)*(q-b); return (a*s2+b*s1)/(s1+s2); } point get(point a,point b,point c) { double x=(b-a)*(c-a); if(sgn(x)==0) { double ab=dis(a,b); double bc=dis(b,c); double ac=dis(a,c); if(sgn(ab-bc)>=0&&sgn(ab-ac)>=0) return (a+b)/2; if(sgn(bc-ab)>=0&&sgn(bc-ac)>=0) return (b+c)/2; return (a+c)/2; } point M1=(a+b)/2,v1=(a-b).verl(); point M2=(b+c)/2,v2=(b-c).verl(); return cross(M1,M1+v1,M2,M2+v2); } int main() { scanf("%d",&n); int i; for(i=0;i<n;i++) scanf("%lf%lf",&p[i].x,&p[i].y); double ang,scal; scanf("%lf%lf",&ang,&scal); ang=ang/180*PI; for(i=0;i<n;i++) { p[i]=p[i].zhuan(ang); p[i].x/=scal; } double r=0; point c=p[0]; for(i=1;i<n;i++) if(dis(p[i],c)>r+1e-10) { c=p[i]; r=0; int j; for(j=0;j<i;j++) if(dis(p[j],c)>r+1e-10) { c=(p[i]+p[j])/2; r=dis(p[i],p[j])/2; int k; for(k=0;k<j;k++) if(dis(p[k],c)>r+1e-10) { c=get(p[i],p[j],p[k]); r=max(dis(p[i],c),max(dis(p[k],c),dis(p[j],c))); } } } printf("%.3lf\n",r); }
BZOJ 3564 信号增幅仪的更多相关文章
- BZOJ 3564: [SHOI2014]信号增幅仪 最小圆覆盖
3564: [SHOI2014]信号增幅仪 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3564 Description 无线网络基站在 ...
- [LOJ 2190] 「SHOI2014」信号增幅仪
[LOJ 2190] 「SHOI2014」信号增幅仪 链接 链接 题解 坐标系直到 \(x\) 轴与椭圆长轴平行 点的坐标变换用旋转公式就可以了 因为是椭圆,所以所有点横坐标除以 \(p\) 然后最小 ...
- [BZOJ 3564] [SHOI2014] 信号增幅仪 【最小圆覆盖】
题目链接:BZOJ - 3564 题目分析 求最小椭圆覆盖,题目给定了椭圆的长轴与 x 轴正方向的夹角,给定了椭圆长轴与短轴的比值. 那么先将所有点旋转一个角度,使椭圆长轴与 x 轴平行,再将所有点的 ...
- 【bzoj3564】 [SHOI2014]信号增幅仪
题目描述: 无线网络基站在理想状况下有效信号覆盖范围是个圆形.而无线基站的功耗与圆的半径的平方成正比. 现给出平面上若干网络用户的位置,请你选择一个合适的位置建设无线基站.... 就在你拿起键盘准备开 ...
- BZOJ 3564: [SHOI2014]信号增幅仪(随机增量法)
如果是个圆的话好办,如果是拉成椭圆呢?直接压回去!!! 然后随机增量法就行了 CODE: #include<cstdio> #include<iostream> #includ ...
- BZOJ3564 信号增幅仪
http://www.lydsy.com/JudgeOnline/problem.php?id=3564 思路:先旋转坐标系,再缩进x坐标,把椭圆变成圆,然后做最小圆覆盖. 还有,为什么用srand( ...
- [SHTSC 2014] 信号增幅仪
最小覆盖圆算法.看着题解半蒙半抄的搞过去了… 主要参考以下http://blog.csdn.net/acdreamers/article/details/9406735http://blog.csdn ...
- BZOJ3564 : [SHOI2014]信号增幅仪
先把所有点绕原点逆时针旋转(360-a)度,再把所有点横坐标除以放大倍数p,最后用随机增量法求最小圆覆盖即可. 时间复杂度期望$O(n)$ #include<cstdio> #includ ...
- 2018.10.15 bzoj3564: [SHOI2014]信号增幅仪(坐标处理+最小圆覆盖)
传送门 省选考最小圆覆盖? 亦可赛艇(你们什么都没看见) 在大佬的引领下成功做了出来. 就是旋转坐标使椭圆的横轴跟xxx轴平行. 然后压缩横坐标使得其变成一个圆. 然后跑最小覆盖圆就可以了. 注意题目 ...
随机推荐
- 雅虎工程师提供的CSS初始化代码
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,b ...
- equals和==
在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String(&qu ...
- OpenStack 界面开发中的排序问题
Contents [hide] 1 需求 2 调研 3 排序的办法 4 解决代码 需求 获取主机列表的时候,希望能够对主机列表能分组显示,比如网络,一组网络段希望在一起显示 调研 openstack的 ...
- git使用记录(新手入门)
最近参与了公司的项目开发,最后要用git来把代码添加到远程库,但是没怎么接触过git,记录一下使用的流程 首先,当然是先下载git,这个略过不提,下载完之后,在你想要保存代码的目录下,用git ini ...
- 利用 iptables 命令限制单个端口的并发连接数
iptables -I INPUT -p tcp --dport 11251:11300 -m connlimit --connlimit-above 10 -j REJECT 以上代码意思: 在IN ...
- JS调用Java函数--DWR框架
(1)dwr与ssh框架整合教程dwr框架介绍. DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJA ...
- M公司面试
1.技术面 跟日历相关的,根据你联系人的时间,确定可以安排活动的时间 2.final面 你的项目经历,挑战,解决办法: 判断两个长方形,是否有重叠部分: 你的人生规划[这个很多公司都会问]
- ectouch第十讲 之ecshop中 dwt, lbi 文件详解
原文:http://www.yunmoban.cn/article-241.html Ecshop包括的文件夹有admin.api.cert.data.images.includes.js. lang ...
- HDU 1269:迷宫城堡(强连通)
http://acm.hdu.edu.cn/showproblem.php?pid=1269 题意:确定是否是一个强连通图. 思路:裸的tarjan算法. #include <cstdio> ...
- 使用mysql profiling功能剖析单条查询
5.1版本开始引入show profile剖析单条语句功能,支持show profiles和show profile语句,参数have_profiling;控制是否开启: 查看是否支持这个功能(查询为 ...