1 条题解

  • 0
    @ 2025-8-24 21:32:00

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 梧桐灯
    梧桐灯下是我熄灯的双眼

    搬运于2025-08-24 21:32:00,当前版本为作者最后更新于2017-12-24 22:31:34,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    看大家写的都挺烦。

    其实全程只用int型就可以搞定,double只用在输出时转换一下。

    因为啊,在计算距离时要用sqrt,而算圆面积时要平方,

    这样,两个就抵消了。

    思路:就是枚举每个太阳黑子为圆心,再贪心。。

    #include <cstdio>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    double PI=3.1415926535;
    struct stu{
        int x;
        int y;
    }s[1005];
    int ans=(1<<30),n; //ans表示最小的半径平方(平方可以省去用double的麻烦)
    inline int dis(int a,int b,int c,int d){
        return (a-c)*(a-c)+(b-d)*(b-d); //算距离,省去sqrt
    }
    int main(){
        scanf("%d",&n);
        int i,j;
        for(i=1;i<=n;i++)
            scanf("%d %d",&s[i].x,&s[i].y);
        for(i=1;i<=n;i++){
            int now=0;
            for(j=1;j<=n;j++){
                if(i==j)
                    continue;
                else
                    now=max(now,dis(s[i].x,s[i].y,s[j].x,s[j].y)); //更新最大的距离平方
            }
            ans=min(ans,now); //更新最小的ans
        }
        printf("%.4lf",(double)ans*PI); //圆面积,因为ans就是r^2,故省去平方
        return 0;
    }
    
    
    • 1

    信息

    ID
    894
    时间
    1000ms
    内存
    125MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者