Official

B - 荷物の配送スケジュール / Package Delivery Schedule Editorial by kyopro_friends


配送能力が高ければ高いほど日数は少なくなるため、求める答えは \(x=M\) とした \(\sum_{i=1}^{N} \left\lceil \frac{A_i}{K+M}\right\rceil\) となります。

\(X,Y>0\) に対して、 \(\left\lceil \frac{X}{Y}\right\rceil=\left\lfloor \frac{X+Y-1}{Y}\right\rfloor\) が成り立つため、多くのプログラミング言語では整数除算の範囲で計算することができます。

なお、今回の制約の範囲内では浮動小数点数を用いて除算を行い ceil 関数を用いることでも正しく計算することができます。

実装例 (C++)

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

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

  long long ans = 0;
  for(int i=0; i<n; i++){
    ans += (a[i]+k+m-1) / (k+m);
  }
  cout << ans << endl;
}

実装例 (Python)

N, K, M = map(int, input().split())
A = list(map(int, input().split()))
ans = sum((a+K+M-1) // (K+M) for a in A)
print(ans)