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:
