题目描述: 有两个正整数 x,y。 正整数 d 满足 0≤d<2k ,然后把 x 变为 x xor d,y 变为 y or d。 操作完后x 和 y 的值尽可能大,求这个最大值与相应的 d。 如果有多解,输出最小的 d。
数据范围:1≤T≤2×105 ,0≤x,y<230,0≤k<30。
我试过这么写(WA了7个点):
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int T;
cin >> T;
while (T--) {
int x, y, k;
cin >> x >> y >> k;
int max_and = 0, min_d = 0;
for (int cur_d = (1 << k) - 1; cur_d >= 0; cur_d--) {
int new_x = x ^ cur_d;
int new_y = y | cur_d;
int cur_and = new_x & new_y;
if (cur_and >= max_and) {
max_and = cur_and;
min_d = cur_d;
}
}
cout << max_and << " " << min_d << endl;
}
return 0;
}