题解 P1927 【防护伞】

ShineEternal

2020-01-17 18:18:00

Solution

[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; } ```