题意:
给定一个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所对应的值!不是位数!
位运算能加括号就加括号,因为优先级很容易搞错!
-
相关阅读:
Python基础复习-基本数据类型
在Docker中使用MindSpore GPU版本
跳跃游戏(贪心思想)
使用Visual Studio Code编译PaddleOCR的C++代码
基于SSM框架的图片分享及评价网站设计与实现毕业设计源码201524
分布式事务之Seata介绍
<Java编程工具JDK、IDEA安装及环境配置教程>——《Java》
项目管理(知识体系概述)
nginx代理minio教程 避坑过的教程 避开SignatureDoesNotMatch
【Flink实战】玩转Flink里面核心的Source Operator实战
-
原文地址:https://blog.csdn.net/weixin_62528401/article/details/126987714