トップタイがある場合に注意!
問題概要 (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; }