[CC-CLPOINT]Optimal Point

[CC-CLPOINT]Optimal Point

题目大意:

\(k(k\le5)\)维空间中,如果点\(X\)的坐标为\((x_1,x_2,\ldots,x_k)\),点\(Y\)的坐标为\((y_1,y_2,\ldots,y_k)\),定义\(X\)\(Y\)之间的曼哈顿距离为\(D(X,Y)=|x_1−y_1|+|x_2−y_2|+\cdots|x_k−y_k|\)

现在在\(k\)维空间中给出\(n(n\le10^5)\)个坐标均为整数的点,求出一个坐标均为整数的点,使得这个点与这\(n\)个点的曼哈顿距离和最小。如果有多个点满足条件,则输出字典序最小的那一个。

思路:

对每一维排序,输出中位数(如有两个输出较小的一个)即可。

源代码:

#include<cstdio>
#include<cctype>
#include<algorithm>
inline int getint() {
	register char ch;
	register bool neg=false;
	while(!isdigit(ch=getchar())) neg|=ch=='-';
	register int x=ch^'0';
	while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
	return neg?-x:x;
}
const int N=1e5,K=5;
int p[K][N];
int main() {
	for(register int T=getint();T;T--) {
		const int n=getint(),k=getint();
		for(register int i=0;i<n;i++) {
			for(register int j=0;j<k;j++) {
				p[j][i]=getint();
			}
		}
		for(register int i=0;i<k;i++) {
			std::sort(&p[i][0],&p[i][n]);
			printf("%d%c",p[i][(n-1)/2]," \n"[i==k-1]);
		}
	}
	return 0;
}
posted @ 2018-10-30 13:19  skylee03  阅读(176)  评论(0编辑  收藏  举报