记录编号 545247 评测结果 AAAAAA
题目名称 圣诞节 最终得分 100
用户昵称 Gravatar瑆の時間~無盡輪迴·林蔭 是否通过 通过
代码语言 C++ 运行时间 0.441 s
提交时间 2019-10-26 11:27:05 内存使用 1.80 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=510;
int vis[maxn]={0},match[maxn]={0};
int w[maxn][maxn];
int N,mid;
struct poi{
	int h,e;
};
poi me[maxn],fe[maxn];
int cnt(int x,int y)
{
	return (me[x].h-fe[y].h)*(me[x].h-fe[y].h)+(me[x].e-fe[y].e)*(me[x].e-fe[y].e);
}
bool Hungary(int x)
{
	for(int i=1;i<=N;i++)
	{
		if(!vis[i]&&w[x][i]<=mid)
		{
			vis[i]=1;
			if(!match[i]||Hungary(match[i]))
			{
				match[i]=x;
				return 1;
			}
		}
	}
	return 0;
}
int LINYIN()
{
	freopen("christmas.in","r",stdin);
	freopen("christmas.out","w",stdout);
	scanf("%d",&N);
	for(int i=1;i<=N;i++)
		scanf("%d%d",&fe[i].h,&fe[i].e);
	for(int i=1;i<=N;i++)
		scanf("%d%d",&me[i].h,&me[i].e);
	for(int i=1;i<=N;i++)
		for(int j=1;j<=N;j++)
			w[i][j]=cnt(i,j);
	int l=0,r=12500,ans=0,num;
	while(l<=r)
	{
		num=0;
		mid=(l+r)>>1;
		memset(match,0,sizeof(match));
		for(int i=1;i<=N;i++)
		{
			if(Hungary(i))num++;
			memset(vis,0,sizeof(vis));
		}
		if(num==N)
		{
			ans=mid;
			r=mid-1;
		}
		else l=mid+1;
	}
	printf("%d",ans);
	return 0;
}
int LWH=LINYIN();
int main()
{
	return 0;
}