#include<iostream>
#include<cmath>
#define PI 3.1415926
using namespace std;
double ans=0.0,tmp[15];
int n,lx,ly,rx,ry;
bool vis[15];
struct spot{
int x;
int y;
double r;
}arr[15];
bool check(int x,int y,int x2,int y2,double r,double r2){
if((sqrt((x2-x)*(x2-x)+(y2-y)*(y2-y))-r-r2)>=0.0)return false;
return true;
}
void dfs(int i,double area){
if(i==n){
ans=max(area,ans);
return;
}
for(int i=0;i<n;i++){
if(vis[i]==true)continue;
for(int j=0;j<n;j++){
if(vis[j]==false)continue;
if(check(arr[i].x,arr[i].y,arr[j].x,arr[j].y,arr[i].r,arr[j].r)){
arr[i].r=sqrt((arr[j].x-arr[i].x)*(arr[j].x-arr[i].x)+(arr[j].y-arr[i].y)*(arr[j].y-arr[i].y))-arr[j].r;
if(arr[i].r<0){
arr[i].r=0;
break;
}
}
}
vis[i]=true;
dfs(i+1,area+(PI*1.0)*arr[i].r*arr[i].r);
arr[i].r=tmp[i];
vis[i]=false;
}
}
int main(){
cin>>n>>lx>>ly>>rx>>ry;
if(rx<lx)swap(rx,lx);
if(ry<ly)swap(ry,ly);
for(int i=0;i<n;i++)cin>>arr[i].x>>arr[i].y,arr[i].r=min(min(arr[i].x-lx,rx-arr[i].x),min(arr[i].y-ly,ry-arr[i].y)),tmp[i]=arr[i].r;
dfs(0,0);
cout<<(int)((rx-lx)*(ry-ly)-ans+0.5);
return 0;
}
上面这段代码中dfs里面,我用i表示第几个数,然后。。。第八个点错了。
#include<iostream>
#include<cmath>
#define PI 3.1415926
using namespace std;
double ans=0.0,tmp[15];
int n,lx,ly,rx,ry;
bool vis[15];
struct spot{
int x;
int y;
double r;
}arr[15];
bool check(int x,int y,int x2,int y2,double r,double r2){
if((sqrt((x2-x)*(x2-x)+(y2-y)*(y2-y))-r-r2)>=0.0)return false;
return true;
}
void dfs(int x,double area){
if(x==n){
ans=max(area,ans);
return;
}
for(int i=0;i<n;i++){
if(vis[i]==true)continue;
for(int j=0;j<n;j++){
if(vis[j]==false)continue;
if(check(arr[i].x,arr[i].y,arr[j].x,arr[j].y,arr[i].r,arr[j].r)){
arr[i].r=sqrt((arr[j].x-arr[i].x)*(arr[j].x-arr[i].x)+(arr[j].y-arr[i].y)*(arr[j].y-arr[i].y))-arr[j].r;
if(arr[i].r<0){
arr[i].r=0;
break;
}
}
}
vis[i]=true;
dfs(x+1,area+(PI*1.0)*arr[i].r*arr[i].r);
arr[i].r=tmp[i];
vis[i]=false;
}
}
int main(){
cin>>n>>lx>>ly>>rx>>ry;
if(rx<lx)swap(rx,lx);
if(ry<ly)swap(ry,ly);
for(int i=0;i<n;i++)cin>>arr[i].x>>arr[i].y,arr[i].r=min(min(arr[i].x-lx,rx-arr[i].x),min(arr[i].y-ly,ry-arr[i].y)),tmp[i]=arr[i].r;
dfs(0,0);
cout<<(int)((rx-lx)*(ry-ly)-ans+0.5);
return 0;
}
我把i给换成x之后,AC了。
很好奇诶,如果是i的问题,不应该全错吗?为啥只有第八个点错。你谷测评姬这情绪闹得可还行呢!难不成。。。第八个(debug)是在暗示我什么吗?(好奇)