专栏文章
题解: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 条评论,欢迎与作者交流。
正在加载评论...