首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数组中相等元素的最大数量

数组中相等元素的最大数量
EN

Stack Overflow用户
提问于 2012-11-22 00:26:00
回答 1查看 1.2K关注 0票数 1

我正在解决codeforces实践中的问题实现。我找不到有效的解决方案。如何解决以下问题?我只能想到一个暴力解决方案

Polycarpus有一个数组,由n个整数a1, a2, ..., an组成。Polycarpus喜欢数组中的数字匹配。这就是为什么他希望数组有尽可能多的相等的数字。为此,Polycarpus多次执行以下操作:

他选择数组ai的两个元素aj (i ≠ j);他同时将数字ai增加1,并将数字aj减少1,即执行ai = ai + 1 ≠ aj = aj - 1。给定的操作恰好更改了两个不同的数组元素。Polycarpus可以无限次地应用所描述的操作。

现在他想知道如果他执行任意数量的这样的操作,他可以获得的相等数组元素的最大数量。帮帮波卡普斯。

输入第一行包含整数n (1 ≤ n ≤ 105) -数组大小。第二行包含空格分隔的整数a1, a2, ..., an (|ai| ≤ 104) -原始数组。

输出打印一个整数-如果他执行任意数量的给定操作,他可以获得的相等数组元素的最大数量。

代码语言:javascript
运行
复制
Sample test(s)
input
2
2 1
output
1
input
3
1 4 1
output
3
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-22 00:27:17

求出所有元素的总和。

如果sum%n==0,则n否则n-1

编辑:说明:

首先,很容易发现答案是最小n-1,不能小于n-1。

证明:选择任何你想要做为你的目标的数字假设最后一个索引,你通过在a1上应用操作,在an.Similarly上做a1=target,在a2和an上应用操作,所以on.So,除了最后一个之外,所有的数字都等于n.Now。

现在我们需要看到,如果sum%n==0,那么所有数字都是平均值,您可以选择您的目标作为here.You可以应用的所有数字的平均值,方法是选择一个值小于mean的索引和其他值大于mean的索引,并使其中一个(可能两者)等于mean。

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

https://stackoverflow.com/questions/13497625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档