比赛 |
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);
}