题意:求用若干个(至少一个)[A,B]中的数进行or操作能得到多少本质不同的数

$1 \leq A \leq B < 2^{60}$

一直在想数位dp,看了题解之后感觉自己就是个sb

我们先把$A,B$前面(高位)相同的二进制位忽略掉,反正无论怎么或都是一样的

那么我们找到一个最大的$p$使得$A>>p \& 1 \ne B>>p \& 1$

下面的$A,B$都是把$p+1$位之后忽略掉(看作0)之后的。

令$T=1<<p$,我们把$[A,B]$看作两部分,$X=[A,T)$和$Y=[T,B]$

我们可以分为三种情况:

1、只选$X$里面的数,最后或出来的数的范围是$[A,T)$

2、只选$Y$里面的数。

令$k$是$B$里面最高位的1的位置(除了$p$这一位)

最后或出来的数的范围就是$[T,T+(1<<k+1)-1]$

3、两个集合里面的数都要选,最后或出来的数的范围是$[T+A,2*T-1]$,就是选$T$和一个$X$里面的数

注意第二种情况和第三种情况有重叠部分。

我怎么把题解翻译了一遍……

这么低的复杂度也让我有点惊讶呢

这种题特点在于,集合里面数是连续的,然后或起来也就是几段连续的。

//Serene
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
using namespace std;
#define ll long long
#define db double
#define For(i,a,b) for(int i=(a);i<=(b);++i)
#define Rep(i,a,b) for(int i=(a);i>=(b);--i)
#define lc son[pos][0]
#define rc son[pos][1]
const int W=60;
ll n,m,ans;char cc;ll ff;
template<typename T>void read(T& aa) {aa=0;ff=1; cc=getchar();while(cc!='-'&&(cc<'0'||cc>'9')) cc=getchar();if(cc=='-') ff=-1,cc=getchar();while(cc>='0'&&cc<='9') aa=aa*10+cc-'0',cc=getchar();aa*=ff;
}int lb(ll x) {int rs=0;while(x) rs++,x>>=1;return rs;}int main() {read(n); read(m);ll p=W,x;while(p>=0&&((n>>p)&1)==((m>>p)&1)) p--;if(p>=0) {n&=(1LL<<p+1)-1;m&=(1LL<<p)-1;ans+=(1LL<<p)-n;x=lb(m);ans+=(1LL<<x);n=max(n,1LL<<x);ans+=(1LL<<p)-n;}else ans=1;printf("%lld\n",ans);return 0;
}

  

转载于:https://www.cnblogs.com/Serene-shixinyi/p/9077134.html

agc015D A or...or B Problem相关推荐

  1. linux下yum错误:[Errno 14] problem making ssl connection Trying other mirror.

    所有的base 都要取消注释 mirrorlist 加上注释 另外所有的enable都要设为零 目录 今天是要yum命令安装EPEL仓库后 yum install epel-release 突然发现y ...

  2. A + B Problem

    1001: A + B Problem Description 计算 A + B. Input 多组测试数据,每组测试数据占一行,包括2个整数. Output 在一行中输出结果. Sample Inp ...

  3. Error:(49, 1) A problem occurred evaluating project ':guideview'. Could not read script 'https://r

    出现问题如下: Error:(49, 1) A problem occurred evaluating project ':guideview'. > Could not read script ...

  4. #418 Div2 Problem B An express train to reveries (构造 || 全排列序列特性)

    题目链接:http://codeforces.com/contest/814/problem/B 题意 : 有一个给出两个含有 n 个数的序列 a 和 b, 这两个序列和(1~n)的其中一个全排列序列 ...

  5. ADPRL - 近似动态规划和强化学习 - Note 3 - Stochastic Infinite Horizon Problem

    Stochastic Infinite Horizon Problem 3.Stochastic Infinite Horizon Problem 定义3.1 无限范围的马尔可夫决策过程 (Marko ...

  6. ADPRL - 近似动态规划和强化学习 - Note 2 - Stochastic Finite Horizon Problem

    2. Stochastic Finite Horizon Problem 在这一节中主要介绍了随机DP算法来解决不确定性下的有限地范围问题,如Denition 1.4所述,它被表述为一个组合优化问题. ...

  7. There was a problem confirming the ssl certificate ……

    在安装一个Python库onetimepass时发生下面的问题: pip install onetimepass Could not fetch URL https://pypi.python.org ...

  8. HDU 1757 A Simple Math Problem

    Problem Description Lele now is thinking about a simple function f(x). If x < 10 f(x) = x. If x & ...

  9. The C10K problem原文翻译

    原文地址:http://www.cnblogs.com/fll/archive/2008/05/17/1201540.html The C10K problem 如今的web服务器需要同时处理一万个以 ...

最新文章

  1. python代码大全表解释-python中的字典用法大全的代码
  2. Spring 文件上传功能
  3. javascrip 中的一些方法
  4. 堆和栈的概念和区别 python_堆和栈的概念和区别
  5. idea常用快捷方式
  6. Android 中的数据储存方案, 持久化技术
  7. hduoj 6000 2016CCPC-final B. Wash(贪心)
  8. 用户故事与敏捷方法笔记 --- 用户故事
  9. 在myql sqlserver 快速找到带有关键字的表
  10. 气候遇上AI:从此天有可测风云
  11. 数字电路实验 04 - | 组合逻辑电路的设计与测试
  12. Linux 挂载光盘镜像配置本地 yum 源安装软件
  13. 【C++】Vscode 中使用CMakeLists(推荐)构建C++项目:项目结构、各个文件夹的作用、从编码到debug
  14. Win10 22H2 19045.2670系统原版镜像
  15. Redis安装与配置Redis安装与配置
  16. adb cat delay 2 second
  17. 2021年中国工业和商业LED照明市场趋势报告、技术动态创新及2027年市场预测
  18. Oracle多表查询 –工作中避免笛卡儿积的出现
  19. 多传感器融合之雷达图像数据集自动生成 - 20220613
  20. tensorflow 中文字体训练集_TensorFlow与中文手写汉字识别

热门文章

  1. Windows 技术篇-设置电脑启用或禁用开机按Ctrl+Alt+Del解除锁定
  2. 微信小程序根据坐标点解析地址常见报错:请求来源未被授权
  3. stm32 systick定时器
  4. 模拟电路技术之基础知识(四)
  5. matplotlib中plot的颜色
  6. Conan and Agasa play a Card Game codeforce
  7. sdut-2732 小鑫の日常系列故事(一)——判断对错
  8. [YTU]_2576( 虚函数练习:动物2)
  9. HOG特征向量的代码 源代码改
  10. 图像傅里叶变换,幅度谱,相位谱