AND Reconstruction§
根据题目 \(b_{i}=a_{i}\&a_{i+1}\) 。
发现 \(a_{i}=b_{i-1}|b_{i}\) ,应该说 \(a_{i}\) 至少得满足这些二进制位为
1的位置上为1。如无必要勿增实体,所以可以认为 \(a_{i}=b_{i-1}|b_{i}\) 。
因此可以先构造出
a数组,然后判断是否满足b数组即可。#include <bits/stdc++.h> void solve() { int n; std::cin >> n; std::vector<int> a(n), b(n); for (int i = 0; i < n - 1; i++) { std::cin >> b[i]; } a[0] = b[0]; for (int i = 1; i < n; i++) { a[i] = b[i - 1] | b[i]; } for (int i = 0; i < n - 1; i++) { if ((a[i] & a[i + 1]) != b[i]) { std::cout << -1 << '\n'; return; } } for (int i = 0; i < n; i++) { std::cout << a[i] << ' '; } std::cout << '\n'; } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int t; std::cin >> t; while (t--) { solve(); } return 0; }