油滴扩展

i 和 j !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int read()
{
	int x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9')
	{
		if(c=='-')  f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9')
	{
		x=x*10+c-'0';
		c=getchar();
	}
	return f*x;
}
const double pi=3.1415926535;
int n,x[10],y[10],x_1,y_1,x_2,y_2,xx,yy,square;
double r[10],ans,dis[10][10];
bool f[10];
void dfs(int p,double area)
{
	if(p>n)
	{
		ans=max(ans,area);
		return;
	}
	for(int i=1;i<=n;i++)
	{
		if(f[i])  continue;
		r[i]=214748;
		r[i]=min(r[i],fabs(x_1-x[i]));
		r[i]=min(r[i],fabs(x_2-x[i]));
		r[i]=min(r[i],fabs(y_1-y[i]));
		r[i]=min(r[i],fabs(y_2-y[i]));
		for(int j=1;j<=n;j++)
		{
			if(!f[j])  continue;
			r[i]=min(r[i],max(dis[i][j]-r[j],0.0));
		}
		f[i]=1;
		dfs(p+1,area+pi*r[i]*r[i]);
		f[i]=0;
	}
}
int main()
{
	n=read();
	x_1=read();  y_1=read();  x_2=read();  y_2=read();
	square=abs(x_2-x_1)*abs(y_2-y_1);
	for(int i=1;i<=n;i++)  x[i]=read(),y[i]=read();
	for(int i=1;i<=n;i++)
	  for(int j=1;j<=n;j++)
	  {
	  	xx=x[i]-x[j];  yy=y[i]-y[j];
	  	dis[i][j]=sqrt(xx*xx+yy*yy);
	  }
    dfs(1,0);
	printf("%.0f",square-ans);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42192786/article/details/89708755
今日推荐