【t086】防护伞

来源:互联网 发布:图像处理分水岭算法 编辑:程序博客网 时间:2024/04/27 18:47

Time Limit: 1 second
Memory Limit: 128 MB

【问题描述】

据说2012的灾难和太阳黑子的爆发有关。于是地球防卫小队决定制造一个特殊防护伞,挡住太阳黑子爆发的区域,减少其对地球的
影响。由于太阳相对与地球来说实在是太大了,我们可以把太阳表面看作一个平面,中心定为(0,0)。根据科学家的情报,在
2012时,太阳表面上产生N个黑子区域,每一个黑子视为一个点。特殊防护伞可以看作一个巨大的圆面,现在地球防卫小队决定
将它的中心定位于某一个黑子,然后用伞面挡住其他黑子。因为制造防护伞的材料成本特别高,所以我们希望伞面尽可能的小。
[数据范围]
对于50%的数据:2 <= N <= 100
对于100%的数据:2 <= N <= 1,000
-10,000 <= x,y <= 10,000
[注意]
精确到小数点后4位
Pi = 3.1415926535
【输入格式】

第1行:一个整数N,表示黑子个数
第2..N-1行:每行两个整数,表示黑子的坐标(x,y)

【输出格式】

第1行:一个实数,表示伞的面积

Sample Input

3
0 1
-8 -4
-1 4

Sample Output

279.6017

【题目链接】:http://noi.qz5z.com/viewtask.asp?id=t086

【题解】

枚举以哪个黑子为中心;
确定哪个中心黑子之后;这个防护伞的最小半径就确定了(即这个点到其他点的最远距离);
在枚举的中心黑子形成的圆中选择半径最小的就好;
pi要按照所给的值不能写acos(-1.0);

【完整代码】

#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>#define LL long longusing namespace std;const int MAXN = 1e3+10;const LL INF = 1e18;const double pi = 3.1415926535;struct abc{    LL x,y;};int n;abc a[MAXN];LL sqr(LL x){    return x*x;}int main(){    //freopen("F:\\rush.txt","r",stdin);    cin >> n;    for (int i = 1;i <= n;i++)        cin >> a[i].x >> a[i].y;    LL ans = INF;    for (int i = 1;i <= n;i++)    {        LL d = 0;        for (int j = 1;j <= n;j++)                d = max(d,sqr(a[i].x-a[j].x)+sqr(a[i].y-a[j].y));        ans = min(ans,d);    }    double r = sqrt(double(ans));    printf("%.4lf\n",pi*r*r);    return 0;}
0 0