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

B. Turtle and an Infinite Sequence区间或和

题目链接

        区间或和有公式,如果求的是【l,r】区间或和,设x是l和r从高位到低位第一位二进制不同的位置,那么ans就是  l   | ((1<<(x+1))-1)  ,比如101111 和100111答案就是100111 | 1111

        也可以去n值去判断它的每一位是否可以取到1,如果n值本身有1,ans该位就有1。我们设判断的位置是d位,那么我们看看它能不能从小的数(左边的数)或过来,比如n=10011,l=100,那么第3一位0其实可以或上100。我们令x为n%2^d, x就是11,如果n大于等于2^d(前提条件),且n可以减去x+1(也就是说让n变成1111,也就是从前面借位,让后面都是1,可以减去x+1表示左区间长度大于等于x+1),表示该为1可以从左区间获得,或者说该位的0就是左区间为1时进位得到的。

        也可以去判断右区间。n离进位最近距离就是2^d-x,如果右区间包括了这个长度,也可以得到1.

        最后只需要判断min(x+1,2^d-x)是否<=m即可(前者得保证n大于等于2^d,也就是说存在高位).

代码1:

        

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int long long
typedef unsigned long long ull;
typedef pair<ll,ll> pii;
const int inf=0x3f3f3f3f;
const int N=1e6+10;
const int mod=1e9+7;
const ll INF=2e9+10;
mt19937_64 rd(23333);
uniform_real_distribution<double> drd(0.000001,0.99999);void solve(){int n,m,l,r;cin>>n>>m;l=max(0ll,n-m),r=n+m;int ans=l;for(int i=40;i>=0;i--){if((1ll<<i)&(l^r)){ans|=((1ll<<(i+1))-1);break;}}cout<<ans<<endl;
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int t=1;cin>>t;while(t--){solve();}return 0;
}

代码2:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int long long
typedef unsigned long long ull;
typedef pair<ll,ll> pii;
const int inf=0x3f3f3f3f;
const int N=1e6+10;
const int mod=1e9+7;
const ll INF=2e9+10;
mt19937_64 rd(23333);
uniform_real_distribution<double> drd(0.000001,0.99999);int n;
int a[N];void solve(){int n,m,l,r;cin>>n>>m;int ans=0;for(int i=0;i<=40;i++){if((n>>i)&1){ans|=(1ll<<i);continue;} int x=n&((1ll<<i)-1);int t=(1ll<<i)-x;if(n>=(1ll<<i))t=min(t,x+1);//if(x>=(1ll<<i)||t<=m)if(t<=m)ans|=(1ll<<i);}cout<<ans<<endl;
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int t=1;cin>>t;while(t--){solve();}return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 威胁组织伪造Loom,Mac用户警惕AMOS窃取软件威胁
  • 消息驱动Stream---基于SpringCloud
  • 【数据结构篇】~复杂度
  • 219页PDF || 大模型技术引领行业变革:2024大模型典型示范应用案例集(附案例集下载)
  • 鸿蒙开发入门day05-ArkTs语言(接口与关键字)
  • Matplotlib入门与进阶:数据可视化的强大工具
  • 灵办AI免费ChatGPT4人工智能浏览器插件快速便捷(多功能)
  • 【学习笔记】Matlab和python双语言的学习(最小生成树——Kruskal算法、Prim算法)
  • springBoot+ druid配置多数据源
  • qt工程中调用sdl的流程
  • centos8以上系统安装docker环境
  • CNN代码实战
  • OpenCV图像滤波(11)中值滤波medianBlur函数的使用
  • Lora 全文翻译
  • 搭建高可用OpenStack(Queen版)集群(九)之部署nova计算节点
  • php的引用
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 07.Android之多媒体问题
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Brief introduction of how to 'Call, Apply and Bind'
  • cookie和session
  • C语言笔记(第一章:C语言编程)
  • idea + plantuml 画流程图
  • JS笔记四:作用域、变量(函数)提升
  • magento2项目上线注意事项
  • Mysql数据库的条件查询语句
  • MySQL主从复制读写分离及奇怪的问题
  • 从零开始在ubuntu上搭建node开发环境
  • 分布式任务队列Celery
  • 实现简单的正则表达式引擎
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #QT(QCharts绘制曲线)
  • #图像处理
  • (1)Jupyter Notebook 下载及安装
  • (day 12)JavaScript学习笔记(数组3)
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (二)Eureka服务搭建,服务注册,服务发现
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (力扣题库)跳跃游戏II(c++)
  • (南京观海微电子)——I3C协议介绍
  • (七)理解angular中的module和injector,即依赖注入
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (一)Neo4j下载安装以及初次使用
  • (转) Face-Resources
  • (转)linux下的时间函数使用
  • (转)Scala的“=”符号简介
  • (转)创业的注意事项
  • (转载)Linux 多线程条件变量同步
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET 材料检测系统崩溃分析
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • @AliasFor 使用
  • @Bean, @Component, @Configuration简析