站外题求助
  • 板块灌水区
  • 楼主封禁用户
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/30 13:58
  • 上次更新2023/12/30 16:32:52
查看原帖
站外题求助
991301
封禁用户楼主2023/12/30 13:58

题目描述: 有两个正整数 x,yx,y。 正整数 dd 满足 0≤d<2k0≤d<2^k ,然后把 xx 变为 xx xorxor dd,yy 变为 yy oror dd。 操作完后xx 和 yy 的值尽可能大,求这个最大值与相应的 dd。 如果有多解,输出最小的 dd。

数据范围:1≤T≤2×1051≤T≤2×10^5 ,0≤x,y<2300≤x,y<2^{30} ,0≤k<300≤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;
}

2023/12/30 13:58
加载中...