結果

問題 No.3223 K-XOR Increasing Sequence
ユーザー woshinailong
提出日時 2025-08-01 22:57:36
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 1,756 bytes
コンパイル時間 733 ms
コンパイル使用メモリ 79,232 KB
実行使用メモリ 12,972 KB
最終ジャッジ日時 2025-08-01 22:57:53
合計ジャッジ時間 16,079 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample WA * 3
other WA * 70
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    int N, K;
    cin >> N >> K;
    vector<int> A(N);
    for (int i = 0; i < N; ++i) {
        cin >> A[i];
    }

    // Separate the numbers into even and odd
    vector<int> even, odd;
    for (int num : A) {
        if (num % 2 == 0) {
            even.push_back(num);
        } else {
            odd.push_back(num);
        }
    }

    // Check if it's possible to form a subsequence of K elements with an even sum
    if (K == 0) {
        cout << "Yes" << endl;
        return 0; // Empty subsequence
    }

    // We need to have an even sum
    // Case 1: All numbers in subsequence are even
    if (even.size() >= K) {
        cout << "Yes" << endl;
        for (int i = 0; i < K; ++i) {
            cout << even[i] << " ";
        }
        cout << endl;
        return 0;
    }

    // Case 2: Use odd numbers
    int oddCount = odd.size();
    // We need an even count of odd numbers to keep the total sum even
    // (0, 2, 4, ...) odd numbers can be used
    int requiredOdds = (K - even.size()) % 2; // This should be even to maintain the parity
    
    // Check if we can satisfy the count
    if (even.size() + oddCount >= K && oddCount >= requiredOdds) {
        cout << "Yes" << endl;
        for (int i = 0; i < even.size(); ++i) {
            cout << even[i] << " ";
        }
        
        // Need to add odd numbers now
        int oddsToTake = K - even.size();
        if (oddsToTake % 2 != 0) {
            oddsToTake--; // Make it even
        }
        for (int i = 0; i < oddsToTake; ++i) {
            cout << odd[i] << " ";
        }
        cout << endl;
        return 0;
    }

    cout << "No" << endl;
    return 0;
}
0