実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 56
問題概要
長さ の正整数列 が与えられる。 の要素の中で正の数の個数が1つ以下になるまで以下の操作を繰り返すとき、その操作回数を求めよ。
- 操作 :
- を降順に並び替え、 をそれぞれ 減らす。
制約
- 入力はすべて整数。
考察
問題文の通りにシミュレーションしていくだけ。 の要素の中の正の数の個数は、ループで数えても構わない。
コード
#include <bits/stdc++.h> using namespace std; #define all(x) (x).begin(), (x).end() #define rep(i, start, end) for (auto i = (start); (i) < (end); (i)++) // ======================================== // int main() { int N; cin >> N; vector<int> A(N); rep(i, 0, N) cin >> A[i]; int ans = 0, cnt = N; while (cnt > 1) { sort(all(A), greater<int>()); A[0]--; A[1]--; if (A[0] == 0) cnt--; if (A[1] == 0) cnt--; ans++; } cout << ans << endl; }
実装時間 : 5分