[AOJ] No. 0567 最高のピザ (Best Pizza)
問題
方針
トッピングを \( k \) 個乗せた時の \( 1 \) ドルあたりのカロリー数を \( f_k \) とし、\( k \) 個のトッピングのカロリーの総和を \( s_k \) とすると、
\[ f_k = \lfloor \dfrac{C + s_k}{A + kB} \rfloor \]
となります。ここで、
\[s_k = \sum_{i = 1}^{k} D_i\]
となるので、\( D_i \) を降順に並べて、\( f_k \) の値を計算します。
コード
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { int N; ll A, B, C; cin >> N >> A >> B >> C; vector<ll> D(N); for (int i = 0; i < N; i++) { cin >> D[i]; } sort(D.begin(), D.end(), greater<ll>()); ll ans = 0; ll s = 0; for (int i = 0; i < N; i++) { s += D[i]; ans = max(ans, (C + s) / (A + (i + 1) * B)); } cout << ans << "\n"; return 0; }
ディスカッション
コメント一覧
まだ、コメントがありません