トップタイがある場合に注意!
問題概要 (0 始まりに表現改)
人の人
がいる。人
のプログラミング力は
である。
人 は必要に応じてプログラミング力を鍛えることで、
人の中で単独トップになろうとしている。
そのためにプログラミング力をいくつ高めればよいかを求めよ。
面倒な解法
人のプログラミング力の最大値を
として処理しようとすると、場合分けが少し面倒になる。
のときは、答えは
のときは......
- 他にプログラミング力が
の人がいなければ、答えは
- いれば、答えは
- 他にプログラミング力が
この解法だと「人 が最強であるときに、人
以外の
の中に同じく最強の人がいるかどうか」を判定する必要が生じてしまう。これは面倒だ。
楽な解法
そこで、人 を除いた
のプログラミング力の最大値を
とする。そうすれば、
のときは、答えは
のときは、答えは
というように、シンプルに解ける!
コード
#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]; // 人 0 を除外した最大値 int maxv = -1; for (int i = 1; i < N; ++i) maxv = max(maxv, A[i]); cout << (A[0] <= maxv ? maxv + 1 - A[0] : 0) << endl; }