题目

David has several containers, each with a number of balls in it. He has just enough containers to sort each type of ball he has into its own container. David wants to sort the balls using his sort method.

附上链接:Organizing Containers of Balls

写在前面

这种题一般我自己搞下来就是很懵的,因为它逻辑相对不清晰,没办法让人很快想清楚该用什么样的方法解决它。

所以我一般都会有个似乎对的思路就往下做,最后报error了再返回找逻辑上的错误,这就导致我经常需要全部从头来过。。。本题基本就是这样

解题思路

我错误的想法就不多说了,直接从正确的开始~

首先我们要明确一点,因为交换时拿走m个球就要拿回来m个球,所以每个容器中球的个数始终是不变

最终要实现在任意次交换后实现每个容器中只放一种类型的球,那么容易得到每种类型的球的数量是与最终放置它们的那个容器中的球数一致的(废话)

也就是说每种类型的球的数量是与每个容器初始的球数一致的

这样思路就很清晰了,我们只要把每种球的数量算出来,每个容器的初始球数算出来,若能相匹配,则可以实现交换;否则不能实现交换。

代码实现

传入的container参数是一个二维列表,每行代表这一容器中各类型球的数量,每列则代表着一种类型的球在各个容器中的分布

这样一说事情就很清晰了,只需要对行列分别求和就能得到上面分析中我们所需要的东西

这里的求和我也是经过查找资料发现,只要经过两层循环就可以实现。这里我之前用的三层循环实现的,感觉很累赘,就查了一下资料,发现果然是可以化简的,而且化简方式还很棒(新手,大佬勿喷),让我深深地感受到了代码的魅力

实现如下

mr = []
mc = []
for i in range(len(container)):
mr.append(sum(container[i]))
tot = 0
for j in range(len(container)):
tot += container[j][i]
mc.append(tot)

就这样,就把两组需要的数值存进了两个列表中

接下来,只要对两个数组进行排序,进行比较就完成了

最终程序

def organizingContainers(container):
mr = []
mc = []
for i in range(len(container)):
mr.append(sum(container[i]))
tot = 0
for j in range(len(container)):
tot += container[j][i]
mc.append(tot)
mr.sort()
mc.sort()
if mr == mc:
return 'Possible'
else:
return 'Impossible'

Organizing Containers of Balls的更多相关文章

  1. 〈一〉ElasticSearch的介绍

    目录 什么是ElasticSearch 核心能力 ES的搜索核心 搜索引擎选择 搜索的处理 补充: 小节总结: 基本学习环境搭建 如何操作ElasticSearch 下载.安装和运行(Based Wi ...

  2. IBM Bluemix体验:Containers持久存储

    上一篇介绍了在Bluemix Containers服务中使用docker hub镜像和container的高可用配置.接下来我们尝试如何在容器中使用持久存储. 在Bluemix的Containers服 ...

  3. IBM Bluemix体验:Containers进阶

    上一篇中介绍了Bluemix的Containers服务以及如何使用自定义的docker image创建一个容器实例并对外提供服务.除了自定义镜像之外,Bluemix Containers还可以使用Do ...

  4. IBM Bluemix体验:Containers

    国际版的Bluemix目前有三个region,US South,United Kingdom和Sydney.其中US South是功能最全的,UK其次,Sydney功能最少.Containers服务在 ...

  5. Codeforces554 C Kyoya and Colored Balls

    C. Kyoya and Colored Balls Time Limit: 2000ms Memory Limit: 262144KB 64-bit integer IO format: %I64d ...

  6. 13 Balls Problem

    今天讨论的是称球问题. No.3 13 balls problem You are given 13 balls. The odd ball may be either heavier or ligh ...

  7. Docker-2:network containers

    docker run -d -P --name web training/webapp python app.py # -name means give the to-be-run container ...

  8. Containers Reserved yarn resourcemanager

    yarn rm的管理页面中显示了集群的概况,其中有一个指标叫Containers Reserved . 预留的容器,为什么会预留,集群的资源使用饱合,新的app请求的资源一般会进入pending状态, ...

  9. Docker Network containers

    Network containers Estimated reading time: 5 minutes If you are working your way through the user gu ...

随机推荐

  1. 2019 ACM-ICPC 南京 现场赛 H. Prince and Princess

    题意 王子想要娶公主,但是需要完成一个挑战:在一些房间中找出公主在哪. 每个房间有一个人,他们彼此知道谁在哪个房间.可以问他们三种问题: 你是谁? 在某个房间是谁? 公主在哪个房间? 有三类人,一类一 ...

  2. LOJ #103. 子串查找 (Hash)

    题意 给定两个字符串 \(A\) 和 \(B\),求 \(B\) 在 \(A\) 中的出现次数. 思路 这是一道 \(KMP\) 的模板题. 不过 \(Hash\) 是个好东西,可以用 \(Hash\ ...

  3. Jackson教程

    Jackson是一个简单基于Java应用库,Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json.xml转换成Java对象.Jackson所依赖的jar包较少,简 ...

  4. 几个比较好的IT站和开发库官网

    1.IT技术.项目类网站 (1)首推CodeProject,一个国外的IT网站,官网地址为:http://www.codeproject.com,这个网站为程序开发者提供了很好的代码示例以及讲解,不过 ...

  5. jmeter 5 参数化

    文件: 文件编码 注意: 如果文件另存为utf-8,文件第一行头会带bom头(不可见字符),jmeter读取参数后,会把头读取到请求报文中,提示不存在该用户 什么是bom头? 在utf-8编码文件中B ...

  6. GNU Linux 64汇编学习

    函数调用传参: 第一个参数:rdi, 第二个参数:rsi 函数调用栈结构: 返回值 第一个参数 第二个参数 +----------+ rsp-24 | a | +----------+ rsp-16 ...

  7. 注解深入浅出之Retrofit中的注解(三)

    更多andorid高级架构进阶视频免费分享学习请点击:https://space.bilibili.com/474380680 Retrofit中的注解 @Query,@QueryMap,@Field ...

  8. gdb调试已在运行中的进程

    一.在服务器上调试进程,服务器上并没有源代码,所以需要将源码上传至服务器,才能调试看到源码,以下是步骤: 1.查看服务进程id:pgrep 服务名 [user@user-MP app]$ pgrep ...

  9. shell script 学习

    终于来到了shell脚本的学习,貌似很牛叉. shell script鸟叔解释:利用shell的功能写的一个program,使用纯文本文件,将一些shell语法和指令写在里面,搭配正则表示法,管线命令 ...

  10. Codeforces 348E 树的中心点的性质 / 树形DP / 点分治

    题意及思路:http://ydc.blog.uoj.ac/blog/12 在求出树的直径的中心后,以它为根,对于除根以外的所有子树,求出子树中的最大深度,以及多个点的最大深度的lca,因为每个点的最长 ...