首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >平等地把食物分给穷人!

平等地把食物分给穷人!
EN

Code Golf用户
提问于 2014-12-05 06:27:56
回答 1查看 652关注 0票数 8

问题

经历了一次可怕的预演事故后,你作为斯克鲁奇McDuck重生了一天。为了最大限度地利用这种情况,你决定把食物送给穷人。因为你也是数学家,所以你把食物存储在向量v(1,2,3)中。

你想给每个家庭大致相同的食物。为了简单起见,每个家庭都有n成员。其任务是编写代码,将向量v拆分为长度为n的行,其中每一行具有相同数量的“食物”。

平等由标准差来衡量;每行的和(每个家庭收到的食物)与平均值有多大的不同。

输入

输入应该是整数n和向量vv的长度不必被n整除;如果是这样,则为零。

示例

代码语言:javascript
运行
AI代码解释
复制
v = (4, 9, 3, 6, 19, 6, 9, 20, 9, 12, 19, 13, 7, 15)
n = 3

应该回来

代码语言:javascript
运行
AI代码解释
复制
 4     6    19
 9     9    13
 3    20     7
 6     9    15
19    12     0

每一行的和为29,31,30,30,31,因此对于n = 2,标准偏差为0.748331。

输出

代码应该输出标准偏差。您也可以打印矩阵,但这不是必需的。

评分

胜利者的判断不是根据最短的代码,而是根据标准偏差之和,给定测试向量n = 2、3和23。例如:

代码语言:javascript
运行
AI代码解释
复制
Score = your_func(2, foodvec) + your_func(3, foodvec) + your_func(23, foodvec)

使用下面的向量测试http://pastebin.com/ybAYGHns和测试n=2,3,23。最后的分数是这三项测验的总和。这个载体有点大,因为史克鲁奇省下了很多食物。

EN

回答 1

Code Golf用户

发布于 2014-12-06 12:14:21

Python3使用PyPy: 6.368014 + 0.701679 + 0.486916 = 7.556608

N=2

最优

有1000个数字,所以我们想把食物分发给500个家庭。如果食物载体被分类(food[1] >= food[2] >= ... >= food[500]),那么通过给第一个家庭food[1]food[500]、第二个家庭food[2]food[499]、第三个家庭food[3]food[498]、.

我想出了一个很简单的证据。基本上,我扩展了std的产品,删除了每个食物分区中出现的术语,并证明了结果是最小的。如果有人想要更详细的解释,那就好好问我。

N> 2的

逼近我不认为,对于n> 2,有一种快速的寻找最优解的方法。 我从一个启发式的解决方案开始。我把食物按顺序(降序)分发给到目前为止食物最低的家庭(只分配给那些收到的食物少于n件的家庭)。 之后,我改进了解决方案,在一对家庭之间交换了1种食物。我使用食物最低的N家庭和到目前为止食物最多的N家庭。在所有可能的交换之后,我选择最佳的交换,并递归地调用本地搜索。 N值越大,std值越低(但运行时间也越长)。我使用了N = 20,当我找不到交换时,我再次尝试使用N = 100。PyPy在不到8分钟内完成了所有3个测试用例。

代码语言:javascript
运行
AI代码解释
复制
def findSmallestStd(food, n):
    food.sort(reverse=True)
    while len(food) % n:
        food.append(0)
    family_count = len(food) // n

    if n == 2: # optimal
        return list(zip(food[:len(food)//2], reversed(food[len(food)//2:])))
    else: # heuristic approach
        partition = [[] for _ in range(family_count)]
        for food_item in sorted(food, reverse=True):
            partition.sort(key=lambda f: sum(f) if len(f) < n else float('inf'))
            partition[0].append(food_item)
        return local_search(partition, calc_std(partition))

def local_search(partition, best_std, N = 20):
    # find indices with smallest and largest sum
    families1 = nsmallest(N, partition, key=sum)
    families2 = nlargest(N, partition, key=sum)
    best_improved_swap = None

    for family1, family2 in product(families1, families2):
        for index1, index2 in product(range(len(family1)), range(len(family2))):
            family1[index1], family2[index2] = family2[index2], family1[index1]
            std = calc_std(partition)
            if std < best_std:
                best_std = std
                best_improved_swap = (family1, family2, index1, index2)
            family1[index1], family2[index2] = family2[index2], family1[index1]

    if best_improved_swap:
        family1, family2, index1, index2 = best_improved_swap
        family1[index1], family2[index2] = family2[index2], family1[index1]
        partition = local_search(partition, best_std)
    elif N < 100:
        return local_search(partition, best_std, 100)
    return partition

完整的代码和输出可以在Github:代码输出上使用。

编辑

我对N3buchadnezzar在最初的问题中提出的std-计算感到困惑.我把它更新为正确的数学定义,这样我们就可以比较不同的解。

编辑2

在我的上一份意见书中,我改变了家庭的数量。N=2的最佳解使用507个家庭。N3buchadnezzar告诉我,一定有ceil(len(food) / n)家族。所以我稍微修改了我的代码。基本上取消了对家庭计数的循环,并改进了本地搜索。

票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/42195

复制
相关文章
钱是穷人的胆。
推荐阅读: 《4位跳崖的农村青年。》 《穷人家的孩子,有什么出路?》 1 往事 这篇文章想写很久了,但一直没有提笔,不知道以什么样的形式和大家聊聊。 我在上高一的时候,我姐上了大学。 作为我们家,唯一走出“市”的人,我姐给我们家带来了很多新鲜的观点。(我18岁之前,没有走出过我们小山县城) 比如说哪里在种蘑菇可以挣钱;比如说哪里养殖XX可以挣钱;比如让我们家承包十几亩地种药材... 说得我们一家人眼冒金光,激动的同时一愣一愣的,但激动归激动,我姐说的方案,我们一个都没执行。 原因很简单,这每一种方案都需要投
纯洁的微笑
2023/05/08
2750
钱是穷人的胆。
Shield Healthcare:为穷人服务(Technology)
有时候,当你纠结于一个小小的客户服务失误时,你就解开了一大堆棘手的问题。这是因为Shield Healthcare没有按时给“耐莉阿姨”送去她的医疗用品。
吴亚芳
2019/12/24
4750
Shield Healthcare:为穷人服务(Technology)
穷人的孩子早编程
你会不会时常疑惑,同为程序员,为啥搞开源的大佬能做出优秀的库,而自己只能跟着文档调用API?
公众号@魔术师卡颂
2021/10/12
4200
google cloud--穷人也能玩深度学习
本文介绍了如何使用Google Cloud Platform进行深度学习训练和部署,包括TensorFlow、Keras、PyTorch等框架的使用。作者通过在Google Cloud Platform中创建项目、配置训练环境、使用Cloud Storage上传数据集、使用TensorFlow训练模型、将模型部署到Cloud Machine Learning Engine中等一系列操作,展示了如何使用Google Cloud Platform进行高效的深度学习训练和部署。
MelonTeam
2018/01/04
3K0
google cloud--穷人也能玩深度学习
2591. 将钱分给最多的儿童
给你一个整数 money ,表示你总共有的钱数(单位为美元)和另一个整数 children ,表示你要将钱分配给多少个儿童。
Michel_Rolle
2023/07/18
2.6K0
球队“食物链“
cpp代码 #include <iostream> using namespace std; const int INF = 10000000; int N; char match[22][22]; int used[22]; int flag, flagrow = 1; int d[22]; int win[22]; void output() { printf("%d", d[1]); for (int i = 2; i <= N; ++i) { printf(" %d", d[i]
砖业洋__
2023/05/06
1110
球队“食物链“
食物链3_食物链条数计算公式
此人对 N 个动物,用上述两种说法,一句接一句地说出 K 句话,这 K 句话有的是真的,有的是假的。
全栈程序员站长
2022/09/22
5320
google cloud :穷人也能玩深度学习
本文介绍了如何使用Google Cloud Platform进行深度学习训练和部署。作者首先介绍了Google Cloud Platform的特点和优势,然后详细讲解了如何利用TensorFlow和Keras在Google Cloud Platform上部署和训练深度学习模型。作者还通过一个实际的案例演示了如何使用Google Cloud Platform进行训练和部署深度学习模型,并分享了在使用过程中需要注意的一些重要细节。
张鹏宇
2017/09/28
19K0
google cloud :穷人也能玩深度学习
鸿蒙食物详情页案例实战
Flex组件在渲染时存在二次布局过程,因此在对性能有严格要求的场景下建议使用Column、Row代替。
徐建国
2023/12/28
2070
鸿蒙食物详情页案例实战
比尔·盖茨公开信:预言未来15年
据美国媒体报道,50年前,比尔·盖茨和他的好伙伴保罗·艾伦寄希望于软件和个人电脑能改变全世界人们的工作和娱乐方式。下这种赌注并非赌博,而是让我们有机会使计算机个人化,并通过软件的神奇力量帮助人们。有人曾认为他们是疯子,但事实上这种努力结出了硕果。 15年前,我们2人下了类似的赌注。怀着支持医疗卫生和教育领域创新工作的想法,我们在2000年创办了我们的基金会,以帮助世界迅速减少不平等现象。迄今所取得的进步令人非常振奋——以至于我们将今后15年的赌注提高了一倍,并制定了宏伟的目标。 我们的大愿望 今后15年贫困
大数据文摘
2018/05/21
1.4K0
食物链(并查集)
动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。  现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。  有人用两种说法对这N个动物所构成的食物链关系进行描述:  第一种说法是"1 X Y",表示X和Y是同类。  第二种说法是"2 X Y",表示X吃Y。  此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句话就是假话,否则就是真话。  1) 当前的话与前面的某些真的话冲突,就是假话;  2) 当前的话中X或Y比N大,就是假话;  3) 当前的话表示X吃X,就是假话。  你的任务是根据给定的N(1 <= N <= 50,000)和K句话(0 <= K <= 100,000),输出假话的总数。 
砖业洋__
2023/05/06
3170
【Unity】触发检测并销毁食物
还是在碰撞检测Box Collider这里,有一个是否是触发器,这里勾上,就从碰撞检测转为触发检测了;
DevFrank
2024/07/24
800
【Unity】触发检测并销毁食物
P3183 [HAOI2016]食物链
题目描述 如图所示为某生态系统的食物网示意图,据图回答第1小题现在给你n个物种和m条能量流动关系,求其中的食物链条数。物种的名称为从1到n编号M条能量流动关系形如a1 b1a2 b2a3 b3......am-1 bm-1am bm其中ai bi表示能量从物种ai流向物种bi,注意单独的一种孤立生物不算一条食物链 输入输出格式 输入格式: 第一行两个整数n和m,接下来m行每行两个整数ai bi描述m条能量流动关系。(数据保证输入数据符号生物学特点,且不会有重复的能量流动关系出现)1<=N<=100000 0
attack
2018/04/13
5610
BZOJ3028: 食物(生成函数)
题意 链接 Sol 生成函数入门题。 对每个物品分别列一下,化到最后是 根据广义二项式定理,最后答案是 N = int(input()) print(int((N + 1) * (N + 2) * N / 6) % 10007)
attack
2019/03/19
4470
食物链问题(并查集)
此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,有的是假的。
用户10604450
2024/03/15
1130
富人来了,穷人走了,你的家乡还好么?
城市的“士绅化”,是近年来欧美兴起的一个概念,大致相当于中国的旧区改造或升级。在西方,围绕这一概念的更多讨论集中在城市改造升级后,可能随之出现的高收入人群挤压原有住户生活空间的情况。但在中国,则是全然不同的一番“景象”。
DT数据侠
2018/08/08
7970
富人来了,穷人走了,你的家乡还好么?
《稀缺》第8章 如何让穷人摆脱贫穷
第8章 如何让穷人摆脱贫穷 从稀缺心态的角度出发,我们就不难理解发生在穷人身上的众多失误。这些失误的不可避免,不是因为他们积极性,而是缺少带宽。因此,我们要包容穷人的不当行为。我们要设计有效的预警机制,让穷人提早为未来做准备。所以,当穷人提供的培训要简单实用——节省带宽的教育方法才是好方法 让“警报”来得更早些 若想让限制手段影响人们的行为,就必须令其进入人们的“管子”视野之内。其中一种方法是,定期发送剩余月份的提醒。通过吹起人们的关注,我们可以试图将这个遥远的问题主动推入“管子”视野之中。另一种方法是,
yeedomliu
2020/08/04
3660
智人凭什么站着食物链顶端?
法国思想家帕斯卡曾说:“人不过是一株芦苇,是自然界中最脆弱的东西;可是,人是会思维的。要想压倒人,世界万物并不需要武装起来;一缕气,一滴水,都能置人于死地。但是,即便世界万物将人压倒了,人还是比世界万物要高出一筹;因为人知道自己会死,也知道世界万物在哪些方面胜过了自己,而世界万物一无所知。”
herain
2022/04/27
5100
智人凭什么站着食物链顶端?
纯CSS实现 | 食物系虚拟流光键盘
我是法医,一只治疗系前端码猿🐒,与代码对话,倾听它们心底的呼声,期待着大家的点赞👍与关注➕,当然也欢迎加入前端猎手技术交流群😛,文末扫码我拉你进群,一起交流技术以及代码之外的一切🙆‍♀️ 📢 嘿!大家好,我是法医,一只治疗系前端码猿🐒,与代码对话,倾听它们心底的呼声,期待着大家的点赞👍与关注➕ 啥是食物系虚拟流光键盘?键盘不是分什么轴嘛,啥时候键盘还有食物系?能吃吗? 废话不多说,有请今天的主角儿 👀 怎么样?是不是很炫?其实这个效果我是在袁老师的公开课上看到的,第一眼看到就情不自禁地迷上了😍,特
程序员法医
2022/08/11
8840
纯CSS实现 | 食物系虚拟流光键盘
《稀缺》第7章 穷人为什么穷
第7章 穷人为什么穷 无能可以导致贫穷,贫穷也可以导致无能。穷人的稀缺心态,是导致他们无能的主要原因。研究表明,穷人的认知能力和执行控制力更弱。他们的大脑中装满了稀缺,就没那么多心思去想其他事了。穷人不仅缺钱,更缺带宽。反过来,带宽负担会致命他们的智力下降 在批评别人之前,你首先要穿上他的鞋子走上一里地。这样,当你批评他时,就是穿着他的鞋子站在了离他一里远的地方——杰克 汉迪《周六夜现场》节目作家 毫无疑问,贫穷最为普遍、最为重要的稀缺形式。现代世界中,贫穷的深度与广度令人震惊:联合国儿童基金会估计,每天都
yeedomliu
2020/08/04
5620

相似问题

蛇的食物短缺

10

把路填好

10

把盖子拿来

10

把单子弄平

20

把权力相加

170
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档