比赛 顾研NOIP2011模拟赛 评测结果 AWAAAATTTT
题目名称 超空间电台 最终得分 50
用户昵称 Truth.Cirno 运行时间 5.097 s
代码语言 C++ 内存使用 7.05 MiB
提交时间 2012-10-17 20:54:19
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
/*double*/
double data[510][3],map[510][510],R[250010];
int maxM,maxMp,Rnum;
bool type[510];
/*double*/
int main(void)
{
	freopen("hyper.in","r",stdin);
	freopen("hyper.out","w",stdout);
	int i,j,k,n,M,NA[2];
	double temp,lastR=0;
	cin>>n;
	for (i=1;i<=n;i++)
		cin>>data[i][0]>>data[i][1]>>data[i][2]>>type[i];
	for (i=1;i<=n;i++)
		for (j=i+1;j<=n;j++)
		{
			temp=pow(data[i][0]-data[j][0],2.0)+pow(data[i][1]-data[j][1],2.0)+pow(data[i][2]-data[j][2],2.0);
			map[i][j]=temp;
			map[j][i]=temp;
			R[Rnum++]=temp;
		}
	sort(R,R+Rnum);
	for (i=0;i<Rnum;i++)
	{
		if (lastR==R[i])
			continue;
		M=0;
		for (j=1;j<=n;j++)
		{
			NA[0]=0;
			NA[1]=0;
			for (k=1;k<=n;k++)
			{
				if (map[j][k]<=R[i])
				{
					NA[type[k]]++;
				}
			}
			if (NA[type[j]]<NA[!type[j]])
				M++;
		}
		if (maxM<M)
		{
			maxM=M;
			maxMp=i;
		}
		lastR=R[i];
	}
	printf("%d\n%.4lf\n",maxM,sqrt(R[maxMp]));
	return(0);
}
/*double*/