变量值不知为何改变了
查看原帖
变量值不知为何改变了
482728
Engulf楼主2024/8/7 14:26

这是后手时的程序,

auto getmsb = [](ll x) {for (int i = 59; ~i; i--) if (x >> i & 1) return i;};
auto popcount = [](ll x) {int res = 0; for (int i = 59; ~i; i--) if (x >> i & 1) res++; return res;};

cout << "second" << endl;
 
ll p1, p2;
cin >> p1 >> p2;
while (p1 && p2) {
  // *1
  ll p = popcount(p1) & 1 ? p2 : p1;
  ll p1 = 1ll << getmsb(p), p2 = p ^ p1;
  cout << p1 << " " << p2 << endl;
  cin >> p1 >> p2;
  assert(p1 != -1 && p2 != -1);
  // *2
  if (!p1 && !p2) break;
}

这会被这样子卡掉:

n=28n = 28

后手。

交互库:7,277, 27

我:选择 2727,拆分为 16,1116, 11

交互库:选择 1111,拆分为 10,110, 1。

这时候,程序会一直拆分为 16,1116,11,而 pp 也一直是 2727,十分玄学,在 *2 处发现 p1 p2 变为了 10,110, 1,但 *1 处又变回了 16,1116, 11

能通过的代码:

cout << "second" << endl;

ll p1 = 1, p2 = 1;
do {
  cin >> p1 >> p2;
  if (!p1 && !p2) break;
  ll p = popcount(p1) & 1 ? p2 : p1;
  ll p1 = 1ll << getmsb(p), p2 = p ^ p1;
  cout << p1 << " " << p2 << endl;
} while (p1 && p2);
2024/8/7 14:26
加载中...