結果

問題 No.3223 K-XOR Increasing Sequence
ユーザー jiangxinyang
提出日時 2025-08-02 08:12:34
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 99 ms / 2,000 ms
コード長 2,181 bytes
コンパイル時間 2,093 ms
コンパイル使用メモリ 198,388 KB
実行使用メモリ 7,720 KB
最終ジャッジ日時 2025-08-02 08:12:52
合計ジャッジ時間 15,650 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 71
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll mod = 1e9 + 7;
const int N = 200005;
const int INF = 0x3f3f3f3f;

int main() {
    int n, k, x, y;
    cin >> n >> k >> x >> y;
    if (!y) {
        cout << "No\n";
        return 0;
    }
    if (k == 1) {
        int lst = x + n - 1;
        if (y < lst) {
            cout << "No\n";
        } else {
            cout << "Yes\n";
            for (int i = 0; i < n - 1; i++) cout << x + i << " ";
            cout << y << "\n";
        }
        return 0;
    }
    vector<int> ans(n, 1);
    ans[0] = x;
    if (k & 1) {
        ans[1] = 1;
        ans[2] = x ^ 1;
        if (ans[2] == 0) {
            ans[1] = 2;
            ans[2] = x ^ 2;
        }
        for (int i = 3; i < k; i++) ans[i] = 1;
    } else {
        ans[1] = x;
        for (int i = 2; i < k; i++) ans[i] = 1;
    }
    ans.back() = y;
    for (int i = k; i < n - 1; i++) ans[i] = ans[i - k];
    if (!x) {
        if (k & 1) {
            if (n == k + 1) {
                for (int i = 1; i < n - 1; i++) ans[i] = 0;
            } else if (n >= k + 3) {
                for (int i = 1; i < k; i++) ans[i] = 1;
                ans[k] = 2;
                ans[k + 1] = 3;
                for (int i = k + 2; i < n - 1; i++) ans[i] = ans[i - k];
            } else {
                if (y == 1) {
                    cout << "No\n";
                    return 0;
                } else {
                    for (int i = 1; i < n - 2; i++) ans[i] = 0;
                    ans[n - 2] = 1;
                }
            }
        } else {
            if (n >= k + 3) {
                ans[1] = 1;
                for (int i = 2; i < n - 1; i++) ans[i] = 3;
            } else if (n == k + 2) {
                if (y == 1) {
                    cout << "No\n";
                    return 0;
                }
                for (int i = 2; i < k; i++) ans[i] = 0;
                ans[k - 1] = 2;
                ans[k] = 3;
            } else {
                for (int i = 1; i < n - 1; i++) ans[i] = 0;
            }
        }
    }
    cout << "Yes\n";
    for (auto x : ans) cout << x << " ";
    cout << "\n";
    return 0;
}
0