题解 P1927 【防护伞】
ShineEternal
2020-01-17 18:18:00
[link](https://blog.csdn.net/kkkksc03/article/details/104023339)
## 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;
}
```