公式

A - 棒の長さ揃え / Make the Stick Lengths Equal 解説 by kyopro_friends


操作回数を少なくするには、棒はできるだけ長いままにするのが得です。
よって、最終的な棒の長さは、条件を満たすことができる最大の長さである \(T:=\min(A_1,\dots,A_N)\) にするのが最適であり、求める答えは \(\sum_{i=1}^{N}(A_i-T)\) となります。

計算量は \(O(N)\) です。言語によってはオーバーフローに注意してください。

以下の実装例では \((\sum_{i=1}^N A_i)-NT\) と計算しています。

実装例 (C++)

#include<bits/stdc++.h>
using namespace std;

int main(){
  int n;
  cin >> n;
  vector<int> a(n);
  for(int i=0; i<n; i++) cin >> a[i];

  long long sum = 0;
  for(int i=0; i<n; i++){
    sum += a[i];
  }
  long long min = *min_element(a.begin(), a.end());

  cout << sum - n * min << endl;
}

実装例 (Python)

N = int(input())
A = list(map(int, input().split()))
print(sum(A) - N * min(A))

投稿日時:
最終更新: