专栏文章

题解:CF2074C XOR and Triangle

CF2074C题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@mipxyuk8
此快照首次捕获于
2025/12/03 19:46
3 个月前
此快照最后确认于
2025/12/03 19:46
3 个月前
查看原文

CF2074C XOR and Triangle

二分做法

根据异或的规律我们不难发现,一个数异或它的一半的结果大于这个数本身,异或它的四分之一的结果会比刚才的小。
具体的证明本蒻给不出(悲)。

AC Code

CPP
#include<bits/stdc++.h>
#define ll long long
const int N = 1e5 + 10;
using namespace std;
ll n;
int main(){
	ios::sync_with_stdio(0);
	int T;
	cin>>T;
	while (T--) {
		cin>>n;
		if (n == 2){
			cout<<"-1"<<'\n';continue;
		} 
		ll l = 1,r = n;
		bool ok = true;
		while (l < r) {
			ll mid = (l+r)>>1;
			ll p = mid ^ n;
			if(p+mid > n && p+n > mid && mid+n > p) {
				cout<<mid<<endl;ok=false;ok1=false;break;
			}else {
				l = mid + 1; //单方向二分就可以了,这里是向上,下面有向下的。 
			}
		}
	/*  第二种二分办法 
		if(ok1){
			while (l < r) {
			ll mid = (l+r)>>1;
			ll p = mid ^ n2;
			if(p+mid > n && p+n > mid && mid+n > p) {
				cout<<mid<<endl;ok=false;break;
			}else {
				r = mid;
			}
		}
		}
	*/	
		if(ok) cout<<"-1"<<'\n';
	}
	return 0;
}

评论

1 条评论,欢迎与作者交流。

正在加载评论...