Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >平等地把食物分给穷人!

平等地把食物分给穷人!
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

复制
相关文章
Java内存缓存-通过Google Guava创建缓存
Guava是Google guava中的一个内存缓存模块,用于将数据缓存到JVM内存中。实际项目开发中经常将一些公共或者常用的数据缓存起来方便快速访问。
小码农薛尧
2019/08/27
2.9K0
Java内存缓存-通过Google Guava创建缓存
怎么获得google adsense账户的批准!
不得不说,Adsense是最佳联盟广告。因为它的CPC单价比任何联盟广告都要高。相对中文网站,英文网站更加容易获得google adsense的许可,因为谷歌官方做出了明确的指示,中国地区网站域名年龄必须有六个月以上的年龄才能获得许可。所以英文网站有天然的优势。
Hoan外贸建站
2020/12/04
2.4K0
看我如何发现Google云平台漏洞并获得$7500赏金
本文讲述了一名乌拉圭17岁高中生,因对信息安全感兴趣,通过学习研究,独立发现谷歌云平台漏洞并获得$7500美金(此前,他曾发现了价值$10000美金的谷歌主机头泄露漏洞)。在谈论该漏洞的具体细节之前,希望读者对谷歌云服务和API机制相关能有所了解,可以先来熟悉几个相关概念。 先导概念 谷歌运行有一个名为Google Service Management的管理服务,谷歌通过它来管理各种应用谷歌系统的内外部接口和用户自行创建的云端服务。在Google Service Management下,用户可以在自己的
FB客服
2018/03/22
2.3K0
看我如何发现Google云平台漏洞并获得$7500赏金
2020 Google 编程之夏活动总结
随着十月份导师峰会与课题回顾的结束,现在我们宣布 Google 编程之夏 2020 活动在 Jenkins 社区圆满结束。我们谨代表 Jenkins 团队,感谢所有今年参与到此次活动的参与者们: 学生、导师、申请者以及各位贡献者。Google 编程之夏活动的顺利举行离不开 Jenkins 社区各位成员的积极参与。
LinuxSuRen
2021/04/13
5830
2020 Google 编程之夏活动总结
如何通过Google Search Console分析搜索流量降低的情况?
首先打开Google Search Console 然后看到我们已经验证好的站点 然后就有以下的图表分析出现。
雾海梦曦
2022/11/14
5010
如何通过Google Search Console分析搜索流量降低的情况?
Google 就是 Google
Google 就是 Google 啊!今天在浏览新闻的时候,突然看到这么 一条新闻:
非著名程序员
2018/12/19
1.1K0
Google 就是 Google
Edge ,Google Chrome 打不开所有网页
1、打开注册表,增加如下项HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge 2、再DWORD(32位)值,命名RendererCodeIntegrityEnabled,值为0 3、重启edge即可。
上善若水.夏
2020/06/16
2.3K0
使用Google JS api 创建 文档
https://developers.google.com/docs/api/reference/rest/v1/documents/request#Request
拿我格子衫来
2022/01/24
3.4K0
使用Google JS api 创建 文档
如何让机器获得幽默感——Google图学习技术揭秘
原文: Graph-powered Machine Learning at Google 作者: Sujith Ravi 译者: KK4SBB 责编:何永灿,关注人工智能,投稿请联系heyc@csdn.net或微信号289416419 近些年来,机器学习技术取得了巨大的进步,使得计算机系统能够解决复杂的现实问题。其中一项先进技术就是由Google研究院的Expander组开发的大规模、基于图的机器学习平台。基于图的机器学习是一款功能强大的工具,被广泛用于我们日常接触到的Google产品和功能,比如用于收
用户1737318
2018/06/06
6050
【Google Play】创建 Google 开发者账号 ( 注册邮箱账号 | 创建开发者账号 )
【Google Play】创建 Google 开发者账号 ( 注册邮箱账号 | 创建开发者账号 )
韩曙亮
2023/03/29
15.2K0
【Google Play】创建 Google 开发者账号 ( 注册邮箱账号 | 创建开发者账号 )
Google 的 Firebase 如何删除项目
https://www.ossez.com/t/google-firebase/13792
HoneyMoose
2021/11/02
3.3K0
Google 的 Firebase 如何删除项目
google scholar_google
DOI全称为Digital Object Unique Identifier,即数字对象唯一标识符,通俗一点来讲,DOI就是一篇文献的身份证
全栈程序员站长
2022/11/10
6800
如何关闭google的安全搜索
我们平常使用google搜索,默认是已启用安全搜索的。例如在google搜索“1”,右上角会出现“已启用安全搜索”。 进入google帮助找到安全搜索内容https://support.google.com/websearch/answer/510 屏蔽 Google 上的色情内容 您可以使用安全搜索设置来滤除 Google 上包含露骨内容的搜索结果(例如色情内容)。安全搜索并非 100% 准确,但它能帮您屏蔽掉大多数成人内容。 您可将安全搜索用作一种家长控制方式,以使孩子远离您手机
小歪
2018/04/04
9.2K0
如何关闭google的安全搜索
在Managed Code通过Google Gmail发送邮件以及如何通过Outlook配置Gmail
在项目开发中,发送邮件时一种非常常见的功能。一般的情况下,大型的公司都有自己的邮件系统,我们可以直接通过公司的Pop/SMTP Server进行邮件的发送和接收。不过,对于一些小公司不具有这样的条件,他们一般通过一些公共的邮件服务通过商提供的邮件服务。比如Sina,163就是很好的、常用的邮件服务。不过相比之下,我还是习惯使用Google Gmail。 接下来,我将介绍两方面来介绍今天的内容,如果通过Managed code通过Gmail进行邮件的发送,以及如何在Outlook中配置Gmail。今天介绍的东
蒋金楠
2018/02/07
1.8K0
在Managed Code通过Google Gmail发送邮件以及如何通过Outlook配置Gmail
如何通过Google来使用ggplot2可视化
今天是大年初二,这篇文章我只想传达一点: 没有什么菜鸟级别的生物信息学数据处理是不能通过Google得到解决方案的,如果有,请换个关键词继续Google! 第一部分 首先用两分钟的时间简单介绍一下R语言: 因为这个语言是肉丝儿(Ross Ihaka)和萝卜特(Robert Gentleman)两个人1992年在S语言的基础上发明出来的开源语言,所以叫做R语言。这两个人是统计学教授出身,所以R语言在统计学方面有着纯正的血统!如果你平时的工作和统计相关,你好意思不会点R语言么? 另外,在R语言的官网上,有这样一
生信技能树
2018/03/08
2K0
如何通过Google来使用ggplot2可视化
如何切换google play地区?
后来我使用我的 Nexus 6 手机注册:设置->帐号->添加帐号->Google->创建帐号,成功注册。
崔哥
2022/09/08
2.3K0
通过 SeeTheStats 公开 Google Analytics 统计结果
广告商投放广告的时候,需要了解投放网站的流量,了解网站的流量的方法有很多,一般可以通过 Alexa,Google Ad Planer,但是这些都不是十分准确的,比如有个广告商通过 Alexa 的数据,以为我的博客一天的流量有 3W, 🙂 。 了解网站流量最直接的方法就是能够查看到统计工具的报表,如果要给广告商 Google Analytics 的统计结果,需要在 Google Analytics 后台操作给他的 Google 帐号赋权查看结果,这样非常麻烦。 SeeTheStats 就是一个使用 Googl
Denis
2023/04/14
4510
通过 SeeTheStats 公开 Google Analytics 统计结果
点击加载更多

相似问题

Python中int的大小是多少?

15

SQL Int(N)的大小是多少?

12

c++:int[3]的大小是多少(int[3])

30

根据C标准,int的大小是多少?

25

Nullable<Int32>的大小是多少?

42
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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