solution:
这道题其实以每个点为圆心遍历,找到和它距离最大的就行。
要注意:
-
不要把外层循环的min写成max,详见注释
-
两个点互相覆盖不同,详见注释
#include<cstdio>
#include<algorithm>
using namespace std;
struct ben
{
int x,y;
}a[1005];
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&a[i].x,&a[i].y);
}
int ans=2147483640;
for(int i=1;i<=n;i++)
{
int r=0;
for(int j=1;j<=n;j++)//两个数互相包含是不同的!!!1不要写成i+1
{
if(i==j)continue;
r=max(r,(a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y));
}
ans=min(ans,r);//因为在上面取到的r就已经包含了所有的黑子,所以这里是min!!!
}
printf("%.4lf\n",(double)ans*3.1415926535);
return 0;
}