比赛 20120418x 评测结果 AWWWWE
题目名称 圣诞节 最终得分 16
用户昵称 Citron酱 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-04-18 15:25:36
显示代码纯文本
#include <cstdio>
#include <cstdlib>

#define I_F "christmas.in"
#define O_F "christmas.out"

const int MAXn=500;
const short P=20;

struct edge
{
	int x,y,z;
}map[MAXn*MAXn];
int n;
int ans;

void Input();
template<typename Any>
inline void Swap(Any&, Any&);
void Qsort(const int&, const int&);
void Search();
void Output();

int main()
{
	Input();
	Qsort(0,n*n-1);
	Search();
	Output();
	return 0;
}

void Input()
{
	short high[MAXn], age[MAXn];
	freopen(I_F,"r",stdin);
	scanf("%d",&n);
	for (int i=0; i<n*2; i++)
		scanf("%hd%hd",&high[i],&age[i]);
	for (int i=0; i<n; i++)
		for (int j=n; j<n*2; j++)
		{
			map[i*n+j-n].x=i;
			map[i*n+j-n].y=j;
			map[i*n+j-n].z=(high[i]-high[j])*(high[i]-high[j])+(age[i]-age[j])*(age[i]-age[j]);
		}
}

template<typename Any>
inline void Swap(Any &a, Any &b)
{
	Any t=a;
	a=b;
	b=t;
}

void Qsort(const int &l, const int &r)
{
	if (r-l>P)
	{
		int x=map[l+rand()%(r-l+1)].z;
		int i=l, j=r;
		do
		{
			while (map[i].z<x) ++i;
			while (map[j].z>x) --j;
			if (i<=j)
				Swap(map[i++],map[j--]);
		} while (i<j);
		if (i<r) Qsort(i,r);
		if (l<j) Qsort(l,j);
	}
	else
	{
		bool flag=true;
		for (int i=l; i<r; ++i)
		{
			flag=false;
			for (int j=r; j>i; --j)
				if (map[j].x<map[j-1].x)
					Swap(map[j],map[j-1]);
		}
	}
}

void Search()
{
	int f[MAXn*MAXn];
	bool flag=true;
	for (int i=0; i<n*n; f[i++]=n);
	for (int i=n*n-1; flag; --i)
		if ((--f[map[i].x])*(--f[map[i].y])==0)
			ans=map[i].z,
			flag=false;
}

void Output()
{
	freopen(O_F,"w",stdout);
	printf("%d\n",ans);
}