[Codeforces] Codeforces Global Round 11 A. Avoiding Zero
問題
方針
配列 \( a \) の総和が \( 0 \) のときは条件を満たす \( b \) は存在しません。配列 \( a \) の総和を \( s \) とすると、\( s > 0 \) のとき、\( a \) を降順に並べることで、任意の累積和が \( 0 \) より大きくなります。一方で、\( s < 0 \) のときは、昇順に並べることで、任意の累積和が \( 0 \) より小さくなります。
コード
#include <bits/stdc++.h> using namespace std; typedef long long ll; int n; int a[50]; void solve(int sum) { sort(a, a + n); if (sum > 0) { for (int i = n - 1; i >= 0; i--) { if (i == 0) { cout << a[i] << "\n"; } else { cout << a[i] << " "; } } } else { for (int i = 0; i < n; i++) { if (i == n - 1) { cout << a[i] << "\n"; } else { cout << a[i] << " "; } } } } int main() { int t; cin >> t; for (int i = 0; i < t; i++) { cin >> n; int sum = 0; for (int j = 0; j < n; j++) { cin >> a[j]; sum += a[j]; } if (sum == 0) { cout << "NO\n"; } else { cout << "YES\n"; solve(sum); } } return 0; }
感想
言われてみればそうかと思うんですが、思いつきませんでした。
ディスカッション
コメント一覧
まだ、コメントがありません