B - XOR = MOD Editorial by MMNMM

実装のテクニック

公式解説と同様の考察により、求めるべき値が存在するなら、それは \(N\) で立っている bit がすべて立っている整数のうち小さいほうから \(K\) 番目のものです。

この値は(使用することができれば)pdep 命令を使ってほとんど実装なく求めることができます。 あとは、これが条件を実際に満たすか確かめればよいです。

参考 : UNICORNプログラミングコンテスト2022(AtCoder Beginner Contest 269) C - Submask 解説 by rsk0315

実装例は以下のようになります。

#include <iostream>
#include "immintrin.h"

int main() {
    using namespace std;
    unsigned T;
    cin >> T;
    for (unsigned i = 0; i < T; ++i) {
        unsigned long N, K;
        cin >> N >> K;
        const auto X = _pdep_u64(K - 1, ~N) | N;
        // 実際に満たしていればそれを出力
        if ((X ^ N) == X % N)
            cout << X << endl;
        // そうでなければ -1 を出力
        else
            cout << "-1" << endl;
    }
    return 0;
}

posted:
last update: