构造大小为 N 的数组 A 和大小为 1 的数组 A,使得所有 A[i]*A[j] 的总和为最小值和正数。1 <= i < j <= N

Construct Array A of 1 and -1 of size N,such that sum of all A[i]*A[j] is Minimum and Positive. 1 <= i < j <= N

本文关键字:lt 数组 小为 最小值      更新时间:2023-10-16

我在比赛中遇到了这个问题。我们给出了一个数字 N,我们需要构造一个大小为 N 的数组,该数组仅由 1 和 -1 组成,使得每对乘积的总和值为最小值和正值。 即如果数组是 A,则

( A[i] * A[j] ( 在全部 1 <= i<= N 上的和是最小值和正数。

例:

输入 => 3

输出 => [1,1,1]

解释 - 所有可能的情况是:

[1,1,1] = 3

[1,1,-1] = -1

[1,-1,-1] = - 1

[-1,-1,-1] = 3

因此,所有组合和最小可能的阳性情况都是 3。

我们如何找到这样的数组?

我试图找到一种模式,但没有奏效。

从分析上讲,它非常简单,无需为其编写程序。

让我们注意,:

(a1 + a2 + ... + an)^2 = (a1^2 + a2^2 + ... + an^2) + 2 * (a1a2 + a1a3 + ... + ana(n-1))

或者换句话说(不能在这里很好地格式化(:

(sum_{i}(ai))^2 = sum_{i}(ai^2) + 2 * sum_{1 <= i < j <= N}(ai * aj)

在这里,我们正在寻找sum_{1 <= i < j <= N}(ai * aj).

经过一些简单的添加,我们得到:

sum_{1 <= i < j <= N}(ai * aj) = 1 / 2 * ((sum_{i}(ai))^2 - sum_{i}(ai^2))

另请注意,sum_{i}(ai^2)是常数,因为它等于N(仅-11(,因此解决方案是当(sum_{i}(ai))^2最小时,因此0相等,当N偶数时,当奇数时1

溶液:

  1. 甚至对于N-N / 21N / 2-1的任何排列.
  2. 对于N奇数 -(N - 1) / 21(N + 1) / 2-1(N - 1) / 2-1(N + 1) / 21的任何排列.

编辑 - 对于最小和:

具有以下基础:

sum_{1 <= i < j <= N}(ai * aj) = 1 / 2 * ((sum_{i}(ai))^2 - sum_{i}(ai^2)) = 1 / 2 * ((sum_{i}(ai))^2 - N)

我们需要找到AI,这样(sum_{i}(ai))^2 > N => sum_{i}(ai) > sqrt(N).

如果我们有ceil(sqrt(N))1,我们必须在1-1之间分配N - ceil(sqrt(N)) = A,以保持它们的总和最小。解决方案是倾斜的:

  1. 对于A = 2 * B=>B乘以1-1.
  2. 对于A = 2 * B + 1=>B + 11B-1.