关于这题的一个玄学问题——错第八个点...
查看原帖
关于这题的一个玄学问题——错第八个点...
253680
HackerDsg楼主2020/8/18 20:58
#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)是在暗示我什么吗?(好奇)

2020/8/18 20:58
加载中...