題目描述
據說?20122012?的災難和太陽黑子的爆發有關。于是地球防衛小隊決定制造一個特殊防護傘,擋住太陽黑子爆發的區域,減少其對地球的影響。由于太陽相對于地球來說實在是太大了,我們可以把太陽表面看作一個平面,中心定為(0,0)。根據情報,在?20122012?年時,太陽表面上會產生?N?個黑子區域,每個黑子視為一個點。特殊防護傘可以看作一個巨大的圓面,現在地球防衛小隊決定將它的中心定位于某個黑子,然后用傘面擋住其他黑子。因為制造防護傘的材料成本特別高,所以我們希望傘面盡可能的小。
輸入格式
第一行:一個整數?N,表示黑子個數。
第?22?到N?1?行:每行兩個整數,表示黑子的坐標?(x,y)。
輸出格式
第一行:一個實數,表示傘的面積。
輸入輸出樣例
輸入 #1
3 0 1 -8 -4 -1 4
輸出 #1
279.6017
思路
枚舉每個黑子,用一個圓覆蓋,然后判斷距離
#include<bits/stdc++.h>
using namespace std;
struct xy
{int x,y;
}a[1005];
int main()
{int n;cin>>n;for(int i=1;i<=n;i++){scanf("%d%d",&a[i].x,&a[i].y);}int ans=100000;for(int i=1;i<=n;i++){int r=0;for(int j=1;j<=n;j++){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);}printf("%.4lf\n",(double)ans*3.1415926535);return 0;
}