Brightest Immaculate Teresa(简单题)(北理16校赛)

时间限制1秒 内存限制64M

题目描述:

        Teresa是个有着丰富内心世界的女孩子,时常抬起头来看着北京的夜空。

        今夜天上又有着无数繁星,Teresa想着一个有趣的问题:如果把所有夜空中的星星看做二维平面上的点 (Xi,Yi) ,哪一个点(这个点可以是平面上任意一点)离所有的星星最近呢最近,意味着对于点 (X,Y) ,使 \sum_{i=1}^{n}{|X-Xi|}+\sum_{i=1}^{n}{|Y-Yi|} 最小。

输入格式:

        给定用例组数T。

        对于每组用例,给出星星数 N  N \leq 1000  且为奇数,接下来的 N 行每行给出 Xi  Yi  0 \leq Xi,Yi < 100  ,用空格隔开。

输出格式:

        对于每组用例,给出两个整数坐标 X,Y 代表离所有星星最近的位置,两个整数用空格隔开,占一行。

样例输入:

        1

        3

        1 3

        2 2 

        3 1

样例输出:

        2 2


题目大意:

              在平面上有一些星星,选取一点作为离所有星星的曼哈顿距离和最小的节点。

解题思路:

              由于星星都在100*100的方格内,可以保证要求的答案一定也在100*100之内,否则答案更好,而且题目要输出整点,所以直接枚举这10000个点,求出和所有星星的坐标差求和即可。


#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <cmath>
#include <map>
#include <queue>
#include <string>
#include <set>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int INF=0x3f3f3f3f;
#define CLR0(a) (memset(a,0,sizeof(a)))
#define CLR1(a) (memset(a,-1,sizeof(a)))
#define CLRf(a) (memset(a,0x3f,sizeof(a)))
//#define rush() int t;scanf("%d",&t);while(t--)
const int maxn=0;
const int maxm=0;
int x[1500],y[1500];
int abss(int xx,int yy)
{
	int z=xx-yy;
	if(z>=0)return z;
	return -z;
}
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int n,xx,yy;
		int mi=INF;
		scanf("%d",&n);
		for(int i=0;i<n;i++)
		{
			scanf("%d%d",&x[i],&y[i]);
		}
		for(int i=0;i<=100;i++)
			for(int j=0;j<=100;j++)
			{
				int sum=0;
				for(int k=0;k<n;k++)
					sum+=abss(i,x[k])+abss(j,y[k]);
				if(sum<mi)
				{
					mi=sum;
					xx=i;yy=j;
				}
			}
		printf("%d %d\n",xx,yy);
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值