比赛 20120418x 评测结果 AAAAAA
题目名称 圣诞节 最终得分 100
用户昵称 201101 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-04-18 16:11:43
显示代码纯文本
/*
UID:cheepok
PID:christmas
*/

#include<stdio.h>
#include<string.h>

int n,l,r,m,tmp,ans,a[501],b[501],c[501],d[501],mat[1001],f[501][501];

bool flag[1001];

bool check(int k)
{
	for(int i=1;i<=n;i++)
	{
		if(!flag[i]&&f[k][i]<=m)
		{
			flag[i]=true;
			if (mat[i]==0||check(mat[i]))
			{
				mat[i]=k;
				return true;
			}
		}
	}
	return false;
}

int main()
{
	freopen("christmas.in","r",stdin);
	freopen("christmas.out","w",stdout);
	int i,j;
	scanf("%d",&n);
	for(i=1;i<=n;i++)scanf("%d%d",&a[i],&b[i]);
	for(i=1;i<=n;i++)scanf("%d%d",&c[i],&d[i]);
	for(i=1;i<=n;i++)for(j=1;j<=n;j++)
	f[i][j]=(a[i]-c[j])*(a[i]-c[j])+(b[i]-d[j])*(b[i]-d[j]);
	l=0;r=12500;
	while(l<=r)
	{
		m=(l+r)>>1;
		tmp=0;
		memset(mat,0,sizeof(mat));
		for(i=1;i<=n;i++)
		{
			if(check(i))tmp++;
			memset(flag,0,sizeof(flag));
		}
		if(tmp==n){ans=m;r=m-1;}
		else {l=m+1;}
	}
	printf("%d\n",ans);
	return 0;
}