关于 CF C
  • 板块学术版
  • 楼主cancan123456
  • 当前回复8
  • 已保存回复8
  • 发布时间2023/1/10 21:58
  • 上次更新2023/10/24 04:49:14
查看原帖
关于 CF C
448887
cancan123456楼主2023/1/10 21:58
#include <cstdio>
using namespace std;
typedef long long ll;
ll calc(ll l, ll r) {
	ll ans = 0;
	for (ll i = 0; i <= 60; i++) {
		if ((((l >> i) & 1) == 1) && ((l >> i) == (r >> i))) {
			ans |= 1 << i;
		}
	}
	return ans;
}
int main() {
	int t;
	scanf("%d", &t);
	for (ll n, x, l, r, ans, mid; t != 0; t--) {
		scanf("%lld %lld", &n, &x);
		l = n;
		r = 1;
		while (r <= n) {
			r <<= 1;
		}
		ans = -1;
		while (l <= r) {
			mid = (l + r) / 2;
			if (calc(n, mid) <= x) {
				ans = mid;
				r = mid - 1;
			} else {
				l = mid + 1;
			}
		}
		if (ans != -1 && calc(n, ans) == x) {
			printf("%lld\n", ans);
		} else {
			printf("-1\n");
		}
	}
	return 0;
}

我写了个二分,然后它寄了,为什么呢?

2023/1/10 21:58
加载中...