agc015D A or...or B Problem
题意:求用若干个(至少一个)[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相关推荐
- linux下yum错误:[Errno 14] problem making ssl connection Trying other mirror.
所有的base 都要取消注释 mirrorlist 加上注释 另外所有的enable都要设为零 目录 今天是要yum命令安装EPEL仓库后 yum install epel-release 突然发现y ...
- A + B Problem
1001: A + B Problem Description 计算 A + B. Input 多组测试数据,每组测试数据占一行,包括2个整数. Output 在一行中输出结果. Sample Inp ...
- 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 ...
- #418 Div2 Problem B An express train to reveries (构造 || 全排列序列特性)
题目链接:http://codeforces.com/contest/814/problem/B 题意 : 有一个给出两个含有 n 个数的序列 a 和 b, 这两个序列和(1~n)的其中一个全排列序列 ...
- ADPRL - 近似动态规划和强化学习 - Note 3 - Stochastic Infinite Horizon Problem
Stochastic Infinite Horizon Problem 3.Stochastic Infinite Horizon Problem 定义3.1 无限范围的马尔可夫决策过程 (Marko ...
- ADPRL - 近似动态规划和强化学习 - Note 2 - Stochastic Finite Horizon Problem
2. Stochastic Finite Horizon Problem 在这一节中主要介绍了随机DP算法来解决不确定性下的有限地范围问题,如Denition 1.4所述,它被表述为一个组合优化问题. ...
- There was a problem confirming the ssl certificate ……
在安装一个Python库onetimepass时发生下面的问题: pip install onetimepass Could not fetch URL https://pypi.python.org ...
- 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 & ...
- The C10K problem原文翻译
原文地址:http://www.cnblogs.com/fll/archive/2008/05/17/1201540.html The C10K problem 如今的web服务器需要同时处理一万个以 ...
最新文章
- python代码大全表解释-python中的字典用法大全的代码
- Spring 文件上传功能
- javascrip 中的一些方法
- 堆和栈的概念和区别 python_堆和栈的概念和区别
- idea常用快捷方式
- Android 中的数据储存方案, 持久化技术
- hduoj 6000 2016CCPC-final B. Wash(贪心)
- 用户故事与敏捷方法笔记 --- 用户故事
- 在myql sqlserver 快速找到带有关键字的表
- 气候遇上AI:从此天有可测风云
- 数字电路实验 04 - | 组合逻辑电路的设计与测试
- Linux 挂载光盘镜像配置本地 yum 源安装软件
- 【C++】Vscode 中使用CMakeLists(推荐)构建C++项目:项目结构、各个文件夹的作用、从编码到debug
- Win10 22H2 19045.2670系统原版镜像
- Redis安装与配置Redis安装与配置
- adb cat delay 2 second
- 2021年中国工业和商业LED照明市场趋势报告、技术动态创新及2027年市场预测
- Oracle多表查询 –工作中避免笛卡儿积的出现
- 多传感器融合之雷达图像数据集自动生成 - 20220613
- tensorflow 中文字体训练集_TensorFlow与中文手写汉字识别