关于这题:
  • 板块学术版
  • 楼主Mcqueen1210
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/9/12 15:48
  • 上次更新2024/9/12 19:06:33
查看原帖
关于这题:
735696
Mcqueen1210楼主2024/9/12 15:48

P1378 60分求助

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=10;
const double pai=3.1415926;
int n,X1,Y1,X2,Y2;
int x[N],y[N];
double r[N],ans=-1;
bool f[N]; 
double max(double a,double b){return a>b?a:b;}
double min(double a,double b){return a<b?a:b;}
double abs(double a){return a<0?-a:a;}
double hl(double o,double p,double r,double t){return sqrt((o-r)*(o-r)+(p-t)*(p-t));}
void dfs(int k,double sum)
{
	if(k==n+1)
	{
		ans=max(ans,sum);
		return;
	}
	for(int i=1;i<=n;i++)
	{
		if(!f[i])
		{
			r[i]=min(abs(X1-x[i]),abs(X2-x[i]));
			r[i]=min(r[i],min(abs(Y1-y[i]),abs(Y2-y[i])));
			for(int j=1;j<=n;j++)
			{
				if(f[j])
				{
					double qsw=hl(x[i],y[i],x[j],y[j]);
					r[i]=min(r[i],qsw-r[j]);
				}
			}
			f[i]=1;
			dfs(k+1,sum+pai*r[i]*r[i]);
			f[i]=0;
		}
	}
}
int main()
{
    cin>>n>>X1>>Y1>>X2>>Y2;
    //X1+=1000,Y1+=1000,X2+=1000,Y2+=1000;
    for(int i=1;i<=n;i++)
    {
    	cin>>x[i]>>y[i];
    	//x[i]+=1000,y[i]+=1000;
    }
    dfs(1,0.0);
	ans=abs(X1-X2)*abs(Y1-Y2)-ans;
    printf("%d",int(ans+0.5));
    return 0;
}
2024/9/12 15:48
加载中...