加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flash Mob

发布时间:2020-12-15 18:15:34 所属栏目:百科 来源:网络整理
导读:这也是一题暴力解决的题,暂时想不出什么好办法,题意很明显是让你找聚所有点总距离最近的点,应常理来说一般都是较中间的点比较近,所以就从最中间的点开始向周围找,直到找到总距离最小的点。 #includeiostream#includecstdio#includecstring#includealgor
这也是一题暴力解决的题,暂时想不出什么好办法,题意很明显是让你找聚所有点总距离最近的点,应常理来说一般都是较中间的点比较近,所以就从最中间的点开始向周围找,直到找到总距离最小的点。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n,xi,yi;
struct node
{
	int x,y;
}pos[1001];
int jisuan(int xx,int yy)
{
	int sx,sy;
	sx=sy=0;
	xi=xx/n;
	yi=yy/n;
	for(int i=0;i<n;i++)
	{
		sx+=fabs(xi-pos[i].x);
		sy+=fabs(yi-pos[i].y);
	}
	int temp=xi;
	int stemp;
		while(1)
		{
			stemp=0;
			temp++;
		    for(int i=0;i<n;i++)
			{
			   stemp+=fabs(temp-pos[i].x);
		    }
			if(stemp>=sx)
				break;
			sx=stemp;
			xi=temp;
		}
		temp=xi;
		while(1)
		{
			stemp=0;
			temp--;
		    for(int i=0;i<n;i++)
			{
			   stemp+=fabs(temp-pos[i].x);
		    }
			if(stemp>sx)
				break;
			sx=stemp;
			xi=temp;
		}
	temp=yi;
		while(1)
		{
			stemp=0;
			temp++;
		    for(int i=0;i<n;i++)
			{
			   stemp+=fabs(temp-pos[i].y);
		    }
			if(stemp>=sy)
				break;
			sy=stemp;
			yi=temp;
		}
		temp=yi;
		while(1)
		{
			stemp=0;
			temp--;
		    for(int i=0;i<n;i++)
			{
			   stemp+=fabs(temp-pos[i].y);
		    }
			if(stemp>sy)
				break;
			sy=stemp;
			yi=temp;
		}
	return sy+sx;
}
int main(void)
{
	int num=0;
	while(scanf("%d",&n),n!=0)
	{
		num++;
		int xx,yy;
		xx=yy=0;
		for(int i=0;i<n;i++)
		{
			cin>>pos[i].x>>pos[i].y;
			xx+=pos[i].x;
			yy+=pos[i].y;
		}
		int len=jisuan(xx,yy);
		printf("Case %d: (%d,%d) %dn",num,yi,len);
	}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读