bzoj 1696: [Usaco2007 Feb]Building A New Barn新牛舍

1696: [Usaco2007 Feb]Building A New Barn新牛舍

Time Limit: 5 Sec   Memory Limit: 64 MB
Submit: 481   Solved: 217
[ Submit][ Status][ Discuss]

Description

经过多年的积蓄,农夫JOHN决定造一个新的牛舍。他知道所有N(2 <= N <= 10,000)头牛的吃草位置,所以他想把牛舍造在最方便的地方。 每一头牛吃草的位置是一个整数点(X_i, Y_i) (-10,000 <= X_i <= 10,000; -10,000 <= Y_i <= 10,000)。 没有两头牛的吃草位置是相邻的。 JOHN决定把牛舍造在一个没有牛吃草的整数点上。如果牛舍在(X, Y),在(X_i, Y_i)的牛到牛舍的距离是|X-X_i|+|Y-Y_i|。 JOHN把牛舍造在哪儿才能使所有牛到牛舍的距离和最低?

Input

第1行: 一个数,N。

第2~N+1行:第i+1行 包含第i头牛的位置(X_i, Y_i)。

Output

第1行: 两个数,最小距离和和所有可能达到这个距离和的牛舍位置的数目。

Sample Input

4
1 -3
0 1
-2 1
1 -1

Sample Output

10 4


这题因为任意两头牛不相邻,所以简单了很多,不然还要搜索

求个中位数就好了

如果n是奇数,判断最中间的那个点上是否有牛,如果有就暴力相邻的四个点

如果n是偶数,最中间的4个点围成的矩形内所有没有牛的点都合法(实际上只有这四个点上可能有牛!)


#include<stdio.h>
#include<map>
#include<stdlib.h>
#include<algorithm>
using namespace std;
map<pair<int, int>, int> p;
int a[10005], b[10005];
int dir[4][2] = {1,0,0,1,-1,0,0,-1};
int main(void)
{
	int n, i, j, x1, y1, x2, y2, sum, bet, ans;
	scanf("%d", &n);
	for(i=1;i<=n;i++)
	{
		scanf("%d%d", &a[i], &b[i]);
		p[make_pair(a[i], b[i])];
	}
	sort(a+1, a+n+1);
	sort(b+1, b+n+1);
	ans = sum = 0, bet = 2147483647;
	if(n%2)
	{
		x1 = a[(n+1)/2], y1 = b[(n+1)/2];
		if(p.count(make_pair(x1, y1)))
		{
			for(i=0;i<=3;i++)
			{
				sum = 0;
				if(p.count(make_pair(x1+dir[i][0], y1+dir[i][1])))
					continue;
				for(j=1;j<=n;j++)
				{
					sum += abs(a[j]-(x1+dir[i][0]));
					sum += abs(b[j]-(y1+dir[i][1]));
				}
				if(sum<bet)
				{
					bet = sum;
					ans = 1;
				}
				else if(sum==bet)
					ans++;
			}
		}
		else
		{
			for(j=1;j<=n;j++)
			{
				sum += abs(a[j]-x1);
				sum += abs(b[j]-y1);
			}
			bet = sum, ans = 1;
		}
	}
	else
	{
		x1 = a[n/2], y1 = b[n/2];
		x2 = a[n/2+1], y2 = b[n/2+1];
		for(j=1;j<=n;j++)
		{
			sum += abs(a[j]-x1);
			sum += abs(b[j]-y1);
		}
		bet = sum, ans = (x2-x1+1)*(y2-y1+1);
		if(p.count(make_pair(x1, y1)))  ans--;
		if(p.count(make_pair(x1, y2)))  ans--;
		if(p.count(make_pair(x2, y2)))  ans--;
		if(p.count(make_pair(x2, y1)))  ans--;
	}
	printf("%d %d\n", bet, ans);
	return 0;
}


  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
限时福利限时福利,15000+程序员的选择! 购课后添加学习助手(微信号:csdn590),按提示消息领取编程大礼包!并获取讲师答疑服务! 套餐中一共包含5门程序员必学的数学课程(共47讲) 课程1:《零基础入门微积分》 课程2:《数理统计与概率论》 课程3:《代码学习线性代数》 课程4:《数据处理的最优化》 课程5:《马尔可夫随机过程》 哪些人适合学习这门课程? 1)大学生,平时只学习了数学理论,并未接触如何应用数学解决编程问题; 2)对算法、数据结构掌握程度薄弱的人,数学可以让你更好的理解算法、数据结构原理及应用; 3)看不懂大牛代码设计思想的人,因为所有的程序设计底层逻辑都是数学; 4)想学习技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; 5)想修炼更好的编程内功,在遇到问题时可以灵活的应用数学思维解决问题。 在这门「专为程序员设计的数学课」系列课中,我们保证你能收获到这些: ①价值300元编程课程大礼包 ②应用数学优化代码的实操方法 ③数学理论在编程实战中的应用 ④程序员必学的5大数学知识 ⑤人工智能领域必修数学课 备注:此课程只讲程序员所需要的数学,即使你数学基础薄弱,也能听懂,只需要初中的数学知识就足矣。 如何听课? 1、登录CSDN学院 APP 在我的课程中进行学习; 2、登录CSDN学院官网。 购课后如何领取免费赠送的编程大礼包和加入答疑群? 购课后,添加助教微信: csdn590,按提示领取编程大礼包,或观看付费视频的第一节内容扫码进群答疑交流!
后台技术选型: <ul style="color:#2F2F2F;"> <li> JDK8 </li> <li> MySQL </li> <li> Spring-boot </li> <li> Spring-data-jpa </li> <li> Lombok </li> <li> Freemarker </li> <li> Bootstrap </li> <li> Websocket </li> </ul> 小程序端技术选型 <ul style="color:#2F2F2F;"> <li> 微信小程序 </li> </ul> <div style="text-align:center;color:#2F2F2F;"> <div style="background-color:transparent;"> <div> </div> <div> <img alt="" src="https://upload-images.jianshu.io/upload_images/6273713-928017278f465cbd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1000/format/webp" /> </div> </div> <div style="font-size:14px;color:#969696;"> <br /> </div> </div> 小程序端 <div style="text-align:center;color:#2F2F2F;"> <div style="background-color:transparent;"> <div> </div> <div> <img alt="" src="https://upload-images.jianshu.io/upload_images/6273713-8d6c2b81701d32cd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1000/format/webp" /> </div> </div> <div style="font-size:14px;color:#969696;"> <br /> </div> </div> <ul style="color:#2F2F2F;"> <li> 扫码点餐 </li> <li> 菜品分类显示 </li> <li> 模拟支付 </li> <li> 评论系统 </li> <li> 购物车 </li> </ul> <p> <span><img alt="" src="https://img-bss.csdn.net/201907270119553529.png" /><br /> </span> </p> <p> <span><img alt="" src="https://img-bss.csdn.net/201907270120098756.png" /><br /> </span> </p> <p> <span><img alt="" src="https://img-bss.csdn.net/201907270120405331.png" /><br /> </span> </p> <p> <span><img alt="" src="https://img-bss.csdn.net/201907270120538298.png" /><img alt="" src="https://img-bss.csdn.net/201907270121012487.png" /><br /> </span> </p>
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页

打赏

Jaihk662

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者