60求调(帮我找个hack数据就行,别太复杂)
查看原帖
60求调(帮我找个hack数据就行,别太复杂)
733734
yanxu_cn楼主2024/10/19 20:33
#include<bits/stdc++.h>
using namespace std;
#define double long double
#define pow powl
#define sqrt sqrtl
struct circle
{
	int xx,yy;
	double rr;
	inline const short 
	cir(int x,int y)//out 1 in -1 on 0
	{
		int a=round(pow(xx-x,2)+pow(yy-y,2)),b=rr;
		if(a>b)return 1;
		if(a==b)return 0;
		if(a<b)return -1;
	}
	inline const double 
	maxrr(int x,int y)
	{
		return pow(sqrt(pow(xx-x,2)+pow(yy-y,2))-sqrt(rr),2);
	}
}cir[7];
int main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int n,x,y,x_,y_,x0,y0;
	double ans,ans_=9000000000;
	cin>>n>>x>>y>>x_>>y_;
	mt19937 mt(time(0));
	for(int i=0;i<n;i++)
	{
		cin>>x0>>y0;
		cir[i]=circle{x0,y0,0};
	}
	for(int k=0;k<300;k++)
	{
		shuffle(cir,cir+n,random_device());
		ans=abs(x-x_)*abs(y-y_);
		for(int i=0;i<n;i++)
		{
			x0=cir[i].xx,y0=cir[i].yy;
			double rr=pow(min({abs(x0-x),abs(x0-x_),abs(y0-y),abs(y0-y_)}),2);
			for(int j=0;j<i;j++)
			{
				short cxx=cir[j].cir(x0,y0);
				if(cxx<=0)
				{
					continue;
				}
				rr=min(rr,cir[j].maxrr(x0,y0));
			}
			cir[i].rr=rr;
			ans-=rr*(double)3.141592653589793;
		}
		ans_=min(ans,ans_);
	}	
	cout<<int(round(ans_));
	return 0;
}
2024/10/19 20:33
加载中...