题目描述

题目描述

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.物流中转站 --->超详细解答相关推荐

  1. 牛客网|倒置字符串|超详细讲解

    题目:将一句话的单词进行倒置,标点不倒置.比如 I like beijing. 经过函数后变为:beijing. like I 输入描述: 每个测试输入包含1个测试用例: I like beijing ...

  2. 【机试题】2014大疆嵌入式笔试题(附超详细解答,下篇)

    上一篇主要是对<2014大疆嵌入式笔试题>的前一部分进行了解答,本文主要是对接下来的几道题进行解答.想要参考上一篇的点击链接:[机试题]2014大疆嵌入式笔试题(附超详细解答,上篇). 嵌 ...

  3. sql replace替换多个字符_牛客网数据库SQL实战详细剖析(4150)

    文章来源:大数据肌肉猿 作者:无精疯 这是一个系列文章,总共61题,分6期,有答案以及解题思路,并附上解题的一个思考过程.具体题目可参考牛客网的SQL实战模块:https://www.nowcoder ...

  4. sql not exists用法_牛客网数据库SQL实战详细剖析(5160)(更新完结)

    文章来源:大数据肌肉猿 作者:无精疯 这是一个系列文章,总共61题,分6期,有答案以及解题思路,并附上解题的一个思考过程. 具体题目可参考牛客网的SQL实战模块: https://www.nowcod ...

  5. 2020 从0到1搭建个人博客网站,图解超详细!(附带软件资源)

    2020从0到1搭建个人博客网站,图解超详细!(附带软件资源) 前言 一.准备工作 1.1 入门知识 1.2 所需软件 1.3 软件下载 总结 二.购买域名及安装软件 2.1 购买域名 2.2 安装软 ...

  6. PS图层混合模式超详细解答-图层混合模式的原理(Part1)

    PS图层混合模式超详细解答-图层混合模式的原理 ☕ 前言 本教程非常详细,请用心看完 本教程如果有如何问题,欢迎评论区留言讨论 本教程为了避免冗余,一些不必要的截图就省略了 本教程只讨论8bit的情形 ...

  7. c++自带的可持久化平衡树?rope大法好!(超详细解答 + 5道例题讲解,可直接替代可持久化的线段树、并查集、平衡树!)

    整理的算法模板合集: ACM模板 目录 c++自带的可持久化平衡树?rope大法好! 1. 声明 2. 支持操作 char类型的rope int类型的rope 3. 具体的细节 4. "可持 ...

  8. 倍增算法入门 超详细解答+LCA+RMQ(ST表)+例题剖析

    目录 一.倍增算法 二.倍增算法的应用:求LCA(最近公共祖先)附模板题 三.倍增算法的应用:RMQ 问题(ST表)附模板题 一.倍增算法 要了解倍增之前,强烈建议大家先看一下这位大佬对倍增的解释:[ ...

  9. 倍增算法入门 超详细解答+LCA+RMQ(ST表)+例题剖析

    目录 一.倍增算法 二.倍增算法的应用:求LCA(最近公共祖先)附模板题 三.倍增算法的应用:RMQ 问题(ST表)附模板题 一.倍增算法 要了解倍增之前,强烈建议大家先看一下这位大佬对倍增的解释:[ ...

最新文章

  1. 「hadoop」hadoop启动需要相关的命令(仅供本人使用)
  2. 各领域机器学习数据集汇总
  3. 【Android应用开发】 Android 崩溃日志 本地存储 与 远程保存
  4. 魔兽争霸Ⅲ运行时不能初始化directX的错误解决
  5. qt 安装mysql_qt 安装mysql数据库
  6. pd怎么卸载linux系统,parallels desktop11怎么卸载?parallels desktop11卸载方法
  7. 判断 iframe 是否加载完成的完美方法(转)
  8. linux脚本编写思想,Linux脚本编写入门基础(三)
  9. 色彩艺术海报PSD模板 | 用色彩挑动你的情趣
  10. 美团搜索中查询改写技术的探索与实践
  11. java day56【 Mybatis 延迟加载策略 、 Mybatis 缓存、Mybatis 注解开发 】
  12. 分享40个超棒的CSS3按钮教程
  13. 深度学习笔记(四)——ResNet模型学习与复现
  14. Microsoft Access 查询
  15. 根据轨道根数解算位置速度
  16. 从草根到百万年薪程序员的二十年风雨之路。
  17. 牛牛倒计时抽签软件1.0发布
  18. GitHub 热榜:被网友疯狂恶搞的「蚂蚁呀嘿」项目终于开源了!
  19. BAT程序员轻轻松松拿20k?学会这些涨薪秘籍你也行!
  20. 飞机大战之一:让背景先动起来

热门文章

  1. 【Hive】 解决 com.ctc.wstx.exc.WstxParsingException: String ‘--‘ not allowed in comment (missing ‘」‘?)
  2. 贩妖记 第四十六章,阴间唯一
  3. Hello PyQt5(一)PyQt5简介
  4. 数学建模国赛2017年C题优秀论文(Word)(颜色与物质浓度辨识)
  5. 【论文解读】Attributed Network Embedding for Learning in a Dynamic Environment
  6. 生成全球定位系统、伽利略和北斗二号的Matlab代码及实际数据捕获文件,为测试功能提供完整信号与频谱
  7. ESLint vs Prettier
  8. smtp实现qq邮件发送
  9. Android开发:仿照一号专车的地图页面
  10. FlyTreeView V4.3 破解手记