言われた通りにシミュレーションする問題!
問題概要
長さ の正の整数からなる数列 が与えられる。この数列に対して
- 降順にソートする
- から 1 を引く
という操作を「数列に含まれる正の数が 1 個以下」になるまで繰り返す。操作は何回行うことになるか?
制約
考えたこと
問題文に書かれた通りにシミュレーションすればよいだろう。なお、
「数列 に含まれる正の数が 1 個以下」であるか
を判定するには、次のようにするのが楽だと思われる。
- 数列 を降順にソートする
- このとき、数列の先頭の要素を除いてすべて負の数であるかを判定する
なお、このようにした場合、次の操作の「 を降順にソートする」は前のターンでやってしまうことになるた、改めてやる必要はなくなる。
コード
#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]; sort(A.begin(), A.end(), greater<int>()); int res = 0; while (A[1] > 0) { A[0]--, A[1]--; sort(A.begin(), A.end(), greater<int>()); res++; } cout << res << endl; }