B4261 [GESP202503 三级] 2025
题目描述
小 A 有一个整数 x x x,他想找到最小的正整数 y y y 使得下式成立:
( x and y ) + ( x or y ) = 2025 (x \ \operatorname{and} \ y) + (x \ \operatorname{or} \ y) = 2025 (x and y)+(x or y)=2025
其中 and \operatorname{and} and 表示二进制按位与运算, or \operatorname{or} or 表示二进制按位或运算。如果不存在满足条件的 y y y,则输出 − 1 -1 −1。
输入格式
一行,一个整数 x x x。
输出格式
一行,一个整数,若满足条件的 y y y 存在则输出 y y y,否则输出 − 1 -1 −1。
输入输出样例 #1
输入 #1
1025
输出 #1
1000
说明/提示
对于所有测试点,保证 0 ≤ x < 2025 0 \leq x < 2025 0≤x<2025。
( x and y ) + ( x or y ) = 2025 (x \ \operatorname{and} \ y) + (x \ \operatorname{or} \ y) = 2025 (x and y)+(x or y)=2025
其中:
- and \operatorname{and} and 表示按位与运算,运算符为 & \& &。
- or \operatorname{or} or 表示按位或运算,运算符为 ∣ | ∣。
解析
枚举法,详见代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
int x;
cin >> x;
for(int y = 1; y <= 1000000; y++) {
if ((x & y) + (x | y) == 2025) {
cout << y;
return 0;
}
}
cout << -1;
return 0;
}