当前位置: 首页 > news >正文

算法-二进制运算

 C-小苯的与三角形_牛客周赛 Round 94

题目描述: 给出我们一个数x,要我们找到一个最小的y(1 <= y < x), 使得x,y,x&y这三个值可以可以构成一个三角形。

本题思路:

  1. 根据&运算符的性质,x & y的值一定不大于min(x,y),说明x&y是他们当中最小的一个。并且y比x小,所以问题就变为了是否可以满足:x&y + y > x这个式子。
  2. 对于x&y + y这个式子,我们可以将他们看出二进制操作。对于x最高位的二进制,如果y这一位二进制位0,那么x&y和y在这一位二进制中都不会做出贡献。这样以来后面的元素也就不可能可以实现了。
  3. 对于x二进制最高位如果是1,那么x&y + y在这一位二进制当中就会进位,答案也一定大于x。说明此时y的最小值就是x的二进制中最高位为1,其余位为0。
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve(){ll x; cin>>x; ll y=0;// 从最高位开始遍历,找到x的最高有效位for(ll i=31;i>=0;i--){// 检查第i位是否为1if(x>>i&1){y=1<<i; // 如果是,将y设置为2的i次方break;}}// 检查y是否满足条件:y必须大于0且小于xif(y<=0||y>=x){y=-1; // 如果不满足,将y设置为-1}cout<<y<<endl; 
}
int main(){ll t;cin>>t;while(t--){ solve();}
}

相关文章:

  • 通过Jflash合并Boot和App两个hex为一个hex的办法
  • Instruct模型 AutoModelForCausalLM :智能指令执行专家
  • 【力扣】关于链表索引
  • ArrayBlockingQueue 和 LinkedBlockingQueue 有什么区别?
  • SpringAI--RAG知识库
  • 网络安全--PHP第三天
  • 一、docker安装以及配置加速
  • 动态库版本不配问题排查步骤
  • 【QT】TXT文件的基础操作
  • 国外常用支付流程简易说明(无代码)
  • NoteGen 如何使用 AI 进行记录
  • orm详解--查询执行
  • c++算法题
  • 红海云荣膺2025人力资源科技影响力品牌30强
  • AI时代新词-机器学习即服务(MLaaS)
  • python:机器学习(KNN算法)
  • 2021年江西工业互联网大赛———工业固件分析
  • 【Linux系统】Linux基础指令(一)
  • java8函数式接口(函数式接口的匿名实现类作为某些方法的入参)
  • MySQL 9.3 超详细下载安装教程(Windows版)附图文说明
  • 阿三做网站/营销网络是啥意思
  • 湖州市建设中心网站/品牌运营公司
  • 有个可以做图片的网站/计算机编程培训学校哪家好
  • 只做PC版网站/网站软文推广网站
  • 没有网站可以做cpa/网站手机版排名seo
  • 怎么做网站竞价推广/淘宝seo什么意思