結果
問題 | No.1298 OR XOR |
ユーザー |
![]() |
提出日時 | 2024-11-27 00:36:42 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,319 bytes |
コンパイル時間 | 2,909 ms |
コンパイル使用メモリ | 242,952 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-27 00:36:46 |
合計ジャッジ時間 | 4,491 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 8 WA * 5 |
ソースコード
#include <bits/stdc++.h>using namespace std;int main(){unsigned long long N;cin >> N;unsigned long long M = N;if (popcount(N) == 1){cout << -1 << " " - 1 << " " - 1;}else{for (unsigned long long i = 0; M != 0; ++i){if (M & 1){unsigned long long L = 1 << i;cout << N << " " << L << " " << N - L;return 0;}M >>= 1; // 右シフト}}}// N=3// 011// Aは右二つのどちらかが1(どちらともありえる)// Bは右二つのどちらかが1(どちらともありえる)// Cは右二つのどちらかが1(どちらともありえる)// AorB=BorC=AorCは必ず存在するか?// 010101011// A A B BB// C C C CC// 存在する// 証明A=B=C=Nとすれば必ず成り立つ// A=B=C=Nのとき AxorBxorC=0になるか?// NxorNは0// 0xorNはN// なのでならない// 3つの桁をxorして必ず0になるためには1が偶数個の時// まず最初にA=Nとする// 次にNの適当な1の桁を立てたものをB// B以外の1の桁を立てたものをC// で成り立つ// 1のけたが1個だけの時// 1000// A=N B=N C=0// だけ 0は正の整数じゃないみたいなので-1を出力