题目大意:
  平面直角坐标系中散落着n个点,一个椭圆的长半轴在对于x轴逆时针旋转α度的角度上,且长半轴是短半轴的k倍。
  问短半轴至少要多长才能覆盖所有的点?

思路:
  首先把坐标顺时针旋转α度,然后把所有点的横坐标缩小k倍,就变成了最小圆覆盖问题。

 #include<cmath>
#include<cstdio>
#include<cctype>
#include<algorithm>
inline int getint() {
register char ch;
register bool neg=false;
while(!isdigit(ch=getchar())) if(ch=='-') neg=true;
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return neg?-x:x;
}
const int N=;
const double eps=1e-;
struct Point {
double x,y;
};
Point p[N];
inline double sqr(const double &x) {
return x*x;
}
inline double dis(const Point &a,const Point &b) {
return sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
}
inline Point mid(const Point &a,const Point &b) {
return (Point){(a.x+b.x)/,(a.y+b.y)/};
}
inline Point out(const Point &a,const Point &b,const Point &c) {
Point ret;
ret.x=((sqr(a.x)+sqr(a.y))*b.y+(sqr(c.x)+sqr(c.y))*a.y+(sqr(b.x)+sqr(b.y))*c.y-(sqr(a.x)+sqr(a.y))*c.y-(sqr(c.x)+sqr(c.y))*b.y-(sqr(b.x)+sqr(b.y))*a.y)/(a.x*b.y+b.x*c.y+c.x*a.y-a.x*c.y-b.x*a.y-c.x*b.y)/;
ret.y=((sqr(a.x)+sqr(a.y))*c.x+(sqr(c.x)+sqr(c.y))*b.x+(sqr(b.x)+sqr(b.y))*a.x-(sqr(a.x)+sqr(a.y))*b.x-(sqr(c.x)+sqr(c.y))*a.x-(sqr(b.x)+sqr(b.y))*c.x)/(a.x*b.y+b.x*c.y+c.x*a.y-a.x*c.y-b.x*a.y-c.x*b.y)/;
return ret;
}
int main() {
const int n=getint();
for(register int i=;i<n;i++) {
p[i]=(Point){getint(),getint()};
}
const double alpha=getint()*M_PI/,k=getint();
for(register int i=;i<n;i++) {
const double x=p[i].x,y=p[i].y;
p[i]=(Point){(x*cos(alpha)+y*sin(alpha))/k,y*cos(alpha)-x*sin(alpha)};
}
std::random_shuffle(&p[],&p[n]);
Point c=p[];
double r=;
for(register int i=;i<n;i++) {
if(dis(c,p[i])<r+eps) continue;
c=p[i];
r=;
for(register int j=;j<i;j++) {
if(dis(c,p[j])<r+eps) continue;
c=mid(p[i],p[j]);
r=dis(c,p[j]);
for(register int k=;k<j;k++) {
if(dis(c,p[k])<r+eps) continue;
c=out(p[i],p[j],p[k]);
r=dis(c,p[k]);
}
}
}
printf("%.3f\n",r);
return ;
}

[SHOI2014]信号增幅仪的更多相关文章

  1. BZOJ 3564: [SHOI2014]信号增幅仪 最小圆覆盖

    3564: [SHOI2014]信号增幅仪 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3564 Description 无线网络基站在 ...

  2. 【bzoj3564】 [SHOI2014]信号增幅仪

    题目描述: 无线网络基站在理想状况下有效信号覆盖范围是个圆形.而无线基站的功耗与圆的半径的平方成正比. 现给出平面上若干网络用户的位置,请你选择一个合适的位置建设无线基站.... 就在你拿起键盘准备开 ...

  3. BZOJ3564 : [SHOI2014]信号增幅仪

    先把所有点绕原点逆时针旋转(360-a)度,再把所有点横坐标除以放大倍数p,最后用随机增量法求最小圆覆盖即可. 时间复杂度期望$O(n)$ #include<cstdio> #includ ...

  4. [BZOJ 3564] [SHOI2014] 信号增幅仪 【最小圆覆盖】

    题目链接:BZOJ - 3564 题目分析 求最小椭圆覆盖,题目给定了椭圆的长轴与 x 轴正方向的夹角,给定了椭圆长轴与短轴的比值. 那么先将所有点旋转一个角度,使椭圆长轴与 x 轴平行,再将所有点的 ...

  5. BZOJ 3564: [SHOI2014]信号增幅仪(随机增量法)

    如果是个圆的话好办,如果是拉成椭圆呢?直接压回去!!! 然后随机增量法就行了 CODE: #include<cstdio> #include<iostream> #includ ...

  6. 2018.10.15 bzoj3564: [SHOI2014]信号增幅仪(坐标处理+最小圆覆盖)

    传送门 省选考最小圆覆盖? 亦可赛艇(你们什么都没看见) 在大佬的引领下成功做了出来. 就是旋转坐标使椭圆的横轴跟xxx轴平行. 然后压缩横坐标使得其变成一个圆. 然后跑最小覆盖圆就可以了. 注意题目 ...

  7. 洛谷P4288||bzoj3564 [SHOI2014]信号增幅仪

    bzoj3564 洛谷P4288 可以旋转一下坐标轴使得x轴与长轴方向对齐,然后将所有的横坐标变为自身除以放大倍数,然后就做一个最小圆覆盖 #include<cstdio> #includ ...

  8. [LOJ 2190] 「SHOI2014」信号增幅仪

    [LOJ 2190] 「SHOI2014」信号增幅仪 链接 链接 题解 坐标系直到 \(x\) 轴与椭圆长轴平行 点的坐标变换用旋转公式就可以了 因为是椭圆,所以所有点横坐标除以 \(p\) 然后最小 ...

  9. LOJ#2190. 「SHOI2014」信号增幅仪(最小圆覆盖)

    题面 传送门 题解 我连椭圆是个啥都不知道导致这么简单一道题我一点思路都没有-- 我们把坐标系旋转一下,让半长轴成为新的\(x\)轴,也就是说所有点都绕原点逆时针旋转\(360-a\)度,然后再把所有 ...

随机推荐

  1. angular响应式编程

    1.响应式编程 例子import {Observable} from "rxjs/Observable"; Observable.from([1,2,3,4]) .filter(( ...

  2. D. Equalize the Remainders (set的基本操作)

    D. Equalize the Remainders time limit per test 3 seconds memory limit per test 256 megabytes input s ...

  3. HDU 多校对抗赛第二场 1004 Game

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

  4. 在Global.asax中过滤POST请求的非法参数。

    using System;using System.Collections.Generic;using System.Collections.Specialized;using System.Linq ...

  5. eclipse 主题文件配置

    eclipse市场搜索 Eclipse Color Theme ----用于控制文本域主题 Eclipse 4 Chrome Theme  chrome风格的主题 最新的:Jeeeyul's Them ...

  6. bzoj1578 [Usaco2009 Feb]Stock Market 股票市场

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1578 [题解] 由于连续买相当于每天买,第二天卖,然后再买.所以每天最后钱尽量多一定是最优的 ...

  7. ZOJ1450 Minimal Circle

    You are to write a program to find a circle which covers a set of points and has the minimal area. T ...

  8. codefoeces problem 671D——贪心+启发式合并+平衡树

    D. Roads in Yusland Mayor of Yusland just won the lottery and decided to spent money on something go ...

  9. codeforces739C - Skills &&金中市队儿童节常数赛

    http://codeforces.com/problemset/problem/739/C 先上链接 这道题 对于蒟蒻的我来说还是很有难度的 调了很久 对于我的代码 mx2是答案 mx1代表单调 m ...

  10. 矩阵快速幂&T1

    T1 知识储备 在写这一题之前,我们首先要了解矩阵乘法(我就是因为不懂弄了好久...) 矩阵的运算()-----(信息学奥赛一本通之提高篇) 矩阵的加法减法是十分简单的,就是把2个矩阵上对应的位置相加 ...