Algorithm 数组中相等元素的最大数目

Algorithm 数组中相等元素的最大数目,algorithm,Algorithm,我在解决代码部队实践中遇到的问题。 我找不到有效的解决办法。 如何解决以下问题? 我只能想出一个暴力解决方案 Polycarpus有一个数组,由n个整数a1组成, a2, ..., 一Polycarpus喜欢数组中的数字匹配。这就是为什么他希望数组具有尽可能多的相等数字。为此,Polycarpus多次执行以下操作: 他选择了数组ai的两个元素aj(i ≠ j) ); 他同时将ai数增加1,将aj数减少1,也就是说,执行ai = 人工智能 + 1和aj = aj - 1. 给定的操作正好更改两个不

我在解决代码部队实践中遇到的问题。 我找不到有效的解决办法。 如何解决以下问题? 我只能想出一个暴力解决方案

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

他选择了数组ai的两个元素aj(i ≠ j) ); 他同时将ai数增加1,将aj数减少1,也就是说,执行ai = 人工智能 + 1和aj = aj - 1. 给定的操作正好更改两个不同的数组元素。Polycarpus可以无限次地应用所述操作

现在,他想知道,如果执行任意数量的此类操作,他可以获得的最大相等数组元素数。救救多角果

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

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

Sample test(s)
input
2
2 1
output
1
input
3
1 4 1
output
3

求所有元素的和

如果和%n==0,则n其他n-1

编辑:解释:

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

证明:选择您希望作为目标的任何数字。并假设最后一个索引n。现在,通过对a1和an应用运算,使a1=目标。同样地,对a2和an应用运算,依此类推。因此,除最后一个数字外,所有数字都等于目标


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

查找所有元素的和

如果和%n==0,则n其他n-1

编辑:解释:

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

证明:选择您希望作为目标的任何数字。并假设最后一个索引n。现在,通过对a1和an应用运算,使a1=目标。同样地,对a2和an应用运算,依此类推。因此,除最后一个数字外,所有数字都等于目标


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

尽管最可能正确,如果你提供一个解释,你的答案的质量会大大提高。沙巴兹:很抱歉,我认为这个问题太简单了,作者可以通过看到答案直接得出结论。我现在已经添加了解释。虽然很可能是正确的,但如果你提供解释,会大大提高你答案的质量。沙巴兹:很抱歉,我认为这个问题太简单了,作者可以通过看到答案直接得出结论。我现在已经添加了解释