牛客 OR175.物流中转站 --->超详细解答
题目描述
题目描述
Shopee物流会有很多个中转站。在选址的过程中,会选择离用户最近的地方建一个物流中转站。
假设给你一个二维平面网格,每个格子是房子则为1,或者是空地则为0。找到一个空地修建一个物流中转站,使得这个物流中转站到所有的房子的距离之和最小。 能修建,则返回最小的距离和。如果无法修建,则返回 -1。
若范围限制在100*100以内的网格,如何计算出最小的距离和?
当平面网格非常大的情况下,如何避免不必要的计算?
输入描述:
4
0 1 1 0
1 1 0 1
0 0 1 0
0 0 0 0先输入方阵阶数,然后逐行输入房子和空地的数据,以空格分隔。
输出描述:
8
能修建,则返回最小的距离和。如果无法修建,则返回 -1。
示例1
输入
4
0 1 1 0
1 1 0 1
0 0 1 0
0 0 0 0
输出
8
示例2
输入
4
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
输出
-1
解题思路
暴力很显然是最不可取的,遍历计算所有房子到某一格的距离的时候都要内嵌两层,很耗时间
所以我们进行观察与思考,发现,假设所有房子到(0,0)的距离为S,那么当中转站在(0,0)的时候,距离就是S(暂时不考虑(0,0)是否有房子)
如图,八芒星即代表中转站
当中转站移动到(i,j)后,对于i行之前的第k行来说,其到中转站的距离为-k+j-k=>j-2k
对于i行之后的所有行来说(包括第i行),他们到新中转站的距离都减少i (大于i的行都不在需要到达第0行)
所以移动后的距离和为
而这个式子对于列来说也是成立的
因此,我们只需要提前求出S,以及每行每列的房子数,然后遍历一次数组,并在每次更新的时候保留较小值作为结果便可以了。
程序
def solution(n,arr):row=[0 for i in range(n)]#每行房子数col=[0 for i in range(n)]#每列房子数res=-1S=0#距离#到0,0距离for i in range(n):for j in range(n):if arr[i][j]==1:S+=i+jrow[i]+=1col[j]+=1for i in range(n):for j in range(n):if arr[i][j]==1:continues=Sfor r in range(n):if r<j:s=s+(j-2*r)*col[r]elif r>=j:s=s-j*col[r]if r<i:s=s+(i-2*r)*row[r]elif r>=i:s=s-i*row[r]if res==-1:res=selse:res=min(res,s)return resif __name__=='__main__':n=int(input())arr=[]for i in range(n):arr.append(list(map(int,input().strip().split())))print(solution(n,arr))
牛客 OR175.物流中转站 --->超详细解答相关推荐
- 牛客网|倒置字符串|超详细讲解
题目:将一句话的单词进行倒置,标点不倒置.比如 I like beijing. 经过函数后变为:beijing. like I 输入描述: 每个测试输入包含1个测试用例: I like beijing ...
- 【机试题】2014大疆嵌入式笔试题(附超详细解答,下篇)
上一篇主要是对<2014大疆嵌入式笔试题>的前一部分进行了解答,本文主要是对接下来的几道题进行解答.想要参考上一篇的点击链接:[机试题]2014大疆嵌入式笔试题(附超详细解答,上篇). 嵌 ...
- sql replace替换多个字符_牛客网数据库SQL实战详细剖析(4150)
文章来源:大数据肌肉猿 作者:无精疯 这是一个系列文章,总共61题,分6期,有答案以及解题思路,并附上解题的一个思考过程.具体题目可参考牛客网的SQL实战模块:https://www.nowcoder ...
- sql not exists用法_牛客网数据库SQL实战详细剖析(5160)(更新完结)
文章来源:大数据肌肉猿 作者:无精疯 这是一个系列文章,总共61题,分6期,有答案以及解题思路,并附上解题的一个思考过程. 具体题目可参考牛客网的SQL实战模块: https://www.nowcod ...
- 2020 从0到1搭建个人博客网站,图解超详细!(附带软件资源)
2020从0到1搭建个人博客网站,图解超详细!(附带软件资源) 前言 一.准备工作 1.1 入门知识 1.2 所需软件 1.3 软件下载 总结 二.购买域名及安装软件 2.1 购买域名 2.2 安装软 ...
- PS图层混合模式超详细解答-图层混合模式的原理(Part1)
PS图层混合模式超详细解答-图层混合模式的原理 ☕ 前言 本教程非常详细,请用心看完 本教程如果有如何问题,欢迎评论区留言讨论 本教程为了避免冗余,一些不必要的截图就省略了 本教程只讨论8bit的情形 ...
- c++自带的可持久化平衡树?rope大法好!(超详细解答 + 5道例题讲解,可直接替代可持久化的线段树、并查集、平衡树!)
整理的算法模板合集: ACM模板 目录 c++自带的可持久化平衡树?rope大法好! 1. 声明 2. 支持操作 char类型的rope int类型的rope 3. 具体的细节 4. "可持 ...
- 倍增算法入门 超详细解答+LCA+RMQ(ST表)+例题剖析
目录 一.倍增算法 二.倍增算法的应用:求LCA(最近公共祖先)附模板题 三.倍增算法的应用:RMQ 问题(ST表)附模板题 一.倍增算法 要了解倍增之前,强烈建议大家先看一下这位大佬对倍增的解释:[ ...
- 倍增算法入门 超详细解答+LCA+RMQ(ST表)+例题剖析
目录 一.倍增算法 二.倍增算法的应用:求LCA(最近公共祖先)附模板题 三.倍增算法的应用:RMQ 问题(ST表)附模板题 一.倍增算法 要了解倍增之前,强烈建议大家先看一下这位大佬对倍增的解释:[ ...
最新文章
- 「hadoop」hadoop启动需要相关的命令(仅供本人使用)
- 各领域机器学习数据集汇总
- 【Android应用开发】 Android 崩溃日志 本地存储 与 远程保存
- 魔兽争霸Ⅲ运行时不能初始化directX的错误解决
- qt 安装mysql_qt 安装mysql数据库
- pd怎么卸载linux系统,parallels desktop11怎么卸载?parallels desktop11卸载方法
- 判断 iframe 是否加载完成的完美方法(转)
- linux脚本编写思想,Linux脚本编写入门基础(三)
- 色彩艺术海报PSD模板 | 用色彩挑动你的情趣
- 美团搜索中查询改写技术的探索与实践
- java day56【 Mybatis 延迟加载策略 、 Mybatis 缓存、Mybatis 注解开发 】
- 分享40个超棒的CSS3按钮教程
- 深度学习笔记(四)——ResNet模型学习与复现
- Microsoft Access 查询
- 根据轨道根数解算位置速度
- 从草根到百万年薪程序员的二十年风雨之路。
- 牛牛倒计时抽签软件1.0发布
- GitHub 热榜:被网友疯狂恶搞的「蚂蚁呀嘿」项目终于开源了!
- BAT程序员轻轻松松拿20k?学会这些涨薪秘籍你也行!
- 飞机大战之一:让背景先动起来
热门文章
- 【Hive】 解决 com.ctc.wstx.exc.WstxParsingException: String ‘--‘ not allowed in comment (missing ‘」‘?)
- 贩妖记 第四十六章,阴间唯一
- Hello PyQt5(一)PyQt5简介
- 数学建模国赛2017年C题优秀论文(Word)(颜色与物质浓度辨识)
- 【论文解读】Attributed Network Embedding for Learning in a Dynamic Environment
- 生成全球定位系统、伽利略和北斗二号的Matlab代码及实际数据捕获文件,为测试功能提供完整信号与频谱
- ESLint vs Prettier
- smtp实现qq邮件发送
- Android开发:仿照一号专车的地图页面
- FlyTreeView V4.3 破解手记