[Codeforces] Codeforces Round #669 (Div. 2) A. Ahahahahahahahaha
問題
方針
配列 \( a \) から並びを変えずに \( \dfrac{n}{2} \) 個以上要素を選んだ配列を \( b \) としたとき、\( b \) が \( b \) の奇数番目の和と偶数番目の和が等しくなるようにします。
\( a \) の \( 0 \) の個数が \( \dfrac{n}{2} \) 以上のとき
このとき、\( \dfrac{n}{2} \) 個の \( 0 \) を出力します。
\( a \) の \( 0 \) の個数が \( \dfrac{n}{2} \) 未満のとき
\( \dfrac{n}{2} \bmod 2 = 0 \) のとき
このとき、\( \dfrac{n}{2} \) 個の \( 1 \) を出力します。
\( \dfrac{n}{2} \bmod 2 = 1 \) のとき
このとき、\( \dfrac{n}{2} + 1\) 個の \( 1 \) を出力します。
コード
#include <bits/stdc++.h> using namespace std; typedef long long ll; int a[100000]; void solve(int n) { int cnt = 0; for (int i = 0; i < n; i++) { if (a[i] == 0) cnt++; } if (cnt >= n / 2) { cout << n / 2 << "\n"; for (int i = 0; i < n / 2; i++) { if (i == n / 2 - 1) { cout << "0\n"; } else { cout << "0 "; } } } else { if ((n / 2) % 2 == 0) { cout << n / 2 << "\n"; for (int i = 0; i < n / 2; i++) { if (i == n / 2 - 1) { cout << "1\n"; } else { cout << "1 "; } } } else { cout << n / 2 + 1 << "\n"; for (int i = 0; i < n / 2 + 1; i++) { if (i == n / 2) { cout << "1\n"; } else { cout << "1 "; } } } } } int main() { int t, n; cin >> t; for (int i = 0; i < t; i++) { cin >> n; for (int j = 0; j < n; j++) { cin >> a[j]; } solve(n); } return 0; }
ディスカッション
コメント一覧
まだ、コメントがありません