细节(坑)题。
反思一下跳入的坑:
1、是接触到(已经放下)油滴,而非接触到(题中给出的)点。
2、如果当前枚举的油滴,在其他油滴的半径以内,则置零即可。
plus1:为什么Xcode里y1会和cmath头文件冲突,?了。
plus2:STL大法好!
#include <bits/stc++.h>
using namespace std;
const double pi = acos(-1.0);
pair<int,int> point[10];
bool used[10];
double r[10];
int n, x, y, xx, yy;
double ans=0;
double Dist(int i,int j){
return sqrt(
(point[i].first-point[j].first)*(point[i].first-point[j].first)+
(point[i].second-point[j].second)*(point[i].second-point[j].second)
);
}
void dfs(int v){
pair<int,int> &p=point[v];
double Min_dist=min(
min(fabs(x-p.first),fabs(xx-p.first)),
min(fabs(y-p.second),fabs(yy-p.second))
);
for(int i=1;i<=n;i++){
if(used[i] && Dist(v,i)-r[i]<=Min_dist){
Min_dist=Dist(v,i)-r[i];
}
}
r[v]=max(Min_dist,0.0);
ans+=r[v]*r[v]*pi;
used[v]=1;
}
int main(){
scanf("%d",&n);
scanf("%d%d%d%d",&x,&y,&xx,&yy);
int v=abs((x-xx)*(y-yy));
for(int i=1;i<=n;i++){
scanf("%d%d",&point[i].first,&point[i].second);
}
sort(point+1,point+n+1);
int Max=v;
do{
ans=0;
for(int i=1;i<=n;i++){
r[i]=0;used[i]=0;
}
for(int i=1;i<=n;i++){
dfs(i);
}
Max=min((int)(v-ans+0.5),Max);
}while(next_permutation(point+1, point+n+1));
printf("%d\n",Max);
}