题目

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. linux与Windows下的heap

    Windows提供Heap相关的API,可以创建多个Heap. 但是Linux下只有一个意义上的Heap,就是Data Segment,由brk/sbrk系统调用来调整其大小. 参考:http://m ...

  2. camunda授权的一些简单操作

    /** * 授权操作 */public class ZccAuthorizationService { AuthorizationService authorizationService; @Befo ...

  3. Linux NIO 系列(04-3) epoll

    目录 一.why epoll 1.1 select 模型的缺点 1.2 epoll 模型优点 二.epoll API 2.1 epoll_create 2.2 epoll_ctl 2.3 epoll_ ...

  4. Arcpy 遍历每一个要素新建要素类

    #方法一:cursor= arcpy.da.SearchCursor(aim_fc,["OID@","SHAPE@"]) for row in cursor: ...

  5. Redis 布隆过滤器

    1.布隆过滤器 内容参考:https://www.jianshu.com/p/2104d11ee0a2 1.数据结构 布隆过滤器是一个BIT数组,本质上是一个数据,所以可以根据下标快速找数据 2.哈希 ...

  6. C#多线程的应用

    1.进程 就像我们任务管理器里面运行的进程 进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源.一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括 ...

  7. redis-布隆过滤器使用

    占用空间测试地址 https://krisives.github.io/bloom-calculator/

  8. codeforces 1A

    题目大意: 就是在一块长方形地面上铺瓷砖,然后一共要用多少块瓷砖,一块瓷砖被割开后只能用一次,输入长,宽,以及瓷砖边长,求一共需要多少块瓷砖: 基本思路: 这里有个技巧:就长来说,需要(n+k-1)/ ...

  9. leetcode-162周赛-1255-得分最高的单词集合

    题目描述: 方法:穷举暴力 class Solution: def maxScoreWords(self, words: List[str], letters: List[str], score: L ...

  10. Delphi ResourceString的用法

    在Delphi编程的那段“古老”的日子里(就是在版本4之前),在程序中使用字符串有两个基本的方法.你可以使用字符串将它们嵌入到源程序中,例如: MessageDlg( 'Leave your stin ...