結果
| 問題 |
No.1652 XOR Inequalities
|
| コンテスト | |
| ユーザー |
ei1333333
|
| 提出日時 | 2021-07-10 03:25:28 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,469 bytes |
| コンパイル時間 | 2,406 ms |
| コンパイル使用メモリ | 202,280 KB |
| 最終ジャッジ日時 | 2025-01-22 23:40:47 |
|
ジャッジサーバーID (参考情報) |
judge5 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 48 WA * 5 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
int main() {
int N;
cin >> N;
vector< int > A(1 << N);
for(auto &a : A) cin >> a;
vector< int > B{A};
for(auto &b : B) if(b == -1) b = (1 << 30) - 1;
vector< tuple< int, int, int > > mada;
for(int i = 0; i < (1 << N); i++) {
for(int j = 0; j < i; j++) {
int k = (i ^ j);
if(k < j and j < i) {
mada.emplace_back(i, j, k);
}
}
}
// すみません 計算量を何も考えていません
for(int i = 29; i >= 0; i--) {
bool update = true;
while(update) {
update = false;
for(auto&[a, b, c] : mada) {
int one = 0;
one += (B[a] >> i) & 1;
one += (B[b] >> i) & 1;
one += (B[c] >> i) & 1;
if(one == 1) {
if((B[a] >> i) & 1) B[a] ^= 1 << i;
if((B[b] >> i) & 1) B[b] ^= 1 << i;
if((B[c] >> i) & 1) B[c] ^= 1 << i;
update = true;
}
}
}
vector< tuple< int, int, int > > nxt;
for(auto&[a, b, c]:mada) {
int one = 0;
one += (B[a] >> i) & 1;
one += (B[b] >> i) & 1;
one += (B[c] >> i) & 1;
if(one != 3) {
nxt.emplace_back(a, b, c);
}
}
mada = move(nxt);
}
for(int i = 0; i < (1 << N); i++) {
if(~A[i] and A[i] != B[i]) {
cout << "No\n";
return 0;
}
}
cout << "Yes\n";
for(int i = 0; i < (1 << N); i++) {
if(i) cout << " ";
cout << B[i];
}
cout << "\n";
}
ei1333333