90pts玄关求条
查看原帖
90pts玄关求条
1092781
_____QWQ_____楼主2024/7/26 08:30
#include <bits/stdc++.h>
using namespace std;

const int N=6;

int n,sx,sy,ex,ey;
int x[N],y[N],a[N];
double ans;
double solve()
{
	double cnt=0,cr[N];
	for(int i=1;i<=n;i++)
	{
		int v=a[i];
		cr[v]=min(min(abs(x[v]-sx),abs(x[v]-ex)),min(abs(y[v]-sy),abs(y[v]-ey)));
		//边界 
		for(int j=i-1;j>=1;j--)
		{
			int p=a[j];
			double len=sqrt((x[v]-x[p])*(x[v]-x[p])+(y[v]-y[p])*(y[v]-y[p]));
			cr[v]=min(len-cr[p],cr[v]);
			if(cr[v]<0) 
			{
				cr[v]=0;
				break;
			}
		}
		
	}
	for(int i=1;i<=n;i++) cnt+=3.1415926*cr[i]*cr[i];
	return cnt;
}

int main()
{
	cin>>n>>sx>>sy>>ex>>ey;
	ans=abs(sx-ex)*abs(sy-ey);
	for(int i=1;i<=n;i++)
	{
		cin>>x[i]>>y[i];
		a[i]=i;		
	}
	double res=0;
	do
	{
		res=max(res,solve());
	}while(next_permutation(a+1,a+n+1));
	cout<<(int)round(ans-res);
	return 0;
}
2024/7/26 08:30
加载中...