题意:
给定一个x,让你找出最小的y,使得:
x&y>0
x^y>0
思路:
一眼贪
极端化,让y尽可能小:y=0
要让x&y>0且y尽可能小:把它最低位的1变成0
要让x^y<0且y尽可能小:把它最低位的0变成1
Code:
- #include
- using namespace std;
- //#define low(x) (x&(-x))
- int x,y;
- void solve(){
- scanf("%d",&x);
- int p=0;
- for(int i=0;i<=30;i++){
- if((x>>i)&1==1){
- p=i;
- break;
- }
- }
- y=0;
- y=y|(1<
- if((x^y)>0){
- printf("%d\n",y);
- return;
- }else{
- int ansi=0;
- for(int i=0;i<=30;i++){
- if(((x>>i)&1)==0){
- ansi=i;
- break;
- }
- }
- y=y|(1<
- printf("%d\n",y);
- }
- }
- int main(){
- //ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
- int T;
- scanf("%d",&T);
- while(T--) solve();
- return 0;
- }
总结:
细节:
lowbit是最低位为1所对应的值!不是位数!
位运算能加括号就加括号,因为优先级很容易搞错!
-
相关阅读:
pandas常用数据操作记录
CYEZ 模拟赛 5
解决docker报eeror: write unix /var/run/docker.sock->@ write:broken pipe
前端架构师之01_ES6_基础
微服务框架 SpringCloud微服务架构 5 Nacos 5.6 环境隔离
Go语言 包管理
数商云:订单积压达 930 亿欧元,西门子如何通过供应链数字化转型缩短交货期
VuePress + GitHub 搭建个人博客踩坑记录
一台Linux机器上最多能建立多少个TCP连接?
java计算机毕业设计闲置物品线上交易系统源码+系统+数据库+lw文档+mybatis+运行部署
-
原文地址:https://blog.csdn.net/weixin_62528401/article/details/126987714