A or…or B Problem

题目链接:luogu AT2382

题目大意

给你一个区间,问里面的数你至少选一个,可以通过或得到多少个数。

思路

考虑一些东西,至少是二进制。
然后想一下会发现高位一样的都可以当 000,就只用从第一个不一样的地方开始看(如果一样就大小为 111)

然后就分割成两个部分的数,考虑分开处理,分别是到 10...10...10... 的和从 10...10...10... 开始的
然后你会发现就是你往上(就是到 10...10...10... 的)的是不会或到小于的值的,所以不会有多的。
然后另外一个自然就是会往上(因为或会让数变大,啊感性一下说变大),那因为你是连续的肯定要的 010101 都可以出现或不出现只要你有,所以你出现过 111 的位都可以 010101 任选,就也是一个二次方。

然后发现少了,会发现第一个部分(最高位是 000)是可以融入到第二个部分里面的。
(因为你可以选 10...010...010...0)使得变成第二部分的。

所以总的来说我们可以总结成若干个区间:
[l,r][l,r][l,r]
[l+2x,2x+1][l+2^x,2^{x+1}][l+2x,2x+1](往上)
[2x,2x+2y+1][2^x,2^x+2^{y+1}][2x,2x+2y+1](yyy 是那个 010101 的位置的)
然后区间求并即可。

(妈的说的好抽象看代码得了)

代码

#include<cstdio>
#include<algorithm>
#define ll long longusing namespace std;struct node {ll l, r;
}p[4];
ll L, R, a[66], b[66];bool cmp(node x, node y) {if (x.l != y.l) return x.l < y.l;return x.r > y.r;
}int main() {scanf("%lld %lld", &L, &R);for (int i = 0; i <= 60; i++) {a[i] = (L >> i) & 1; b[i] = (R >> i) & 1;}if (L == R) {printf("1"); return 0;}for (int i = 60; i >= 0; i--)if (a[i] != b[i]) {L ^= a[i] << i, R ^= b[i] << i;int pl = -1;for (int j = i - 1; j >= 0; j--) if (b[j]) {pl = j; break;}ll l1 = L, r1 = R ^ (1ll << i), l2 = (1ll << i) + L, r2 = (1ll << (i + 1)) - 1;ll l3 = (1ll << i), r3 = (1ll << i) + (1ll << (pl + 1)) - 1;p[1] = (node){l1, r1}; p[2] = (node){l2, r2}; p[3] = (node){l3, r3};sort(p + 1, p + 3 + 1, cmp);ll ans = 0; ll R = -1;for (int i = 1; i <= 3; i++) {//区间求交if (p[i].l > R) R = p[i].r, ans += p[i].r - p[i].l + 1;else if (p[i].r > R) ans += p[i].r - R, R = p[i].r;}printf("%lld", ans);return 0;}else L ^= a[i] << i, R ^= b[i] << i;return 0;
}

【luogu AT2382】A or...or B Problem(思维)相关推荐

  1. [luogu P4198] 楼房重建(线段树 + 思维)

    luogu 楼房重建 problem solution code problem 洛谷链接 solution 非常巧妙的一道题,对线段树的运用很灵活. 显然这个与原点的连线可以想到将每个点转化为与原点 ...

  2. codeforces1194B Yet Another Crosses Problem 思维

    网址:http://codeforces.com/contest/1194/problem/B 题意: 给出一个点阵,问至少再需要涂黑多少个点,可以出现一个长度和宽度都达到点阵最大尺寸的十字. 题解: ...

  3. 2020牛客多校第3场:[Points Construction Problem + 思维题+构造]

    题目链接 题目大意:就是给你n个边长为1的正方形,要求用这些正方形拼成周长为m的图形,并输出这些正方形的坐标,如果没有输出No 首先如果这些正方形都零散分布那么周长就是4∗n4*n4∗n,如果将这些正 ...

  4. 解题报告:luogu P3469 [POI2008]BLO-Blockade(割点判定 + 思维计算)

    题目链接:BLO 这道题很明显就是要求割点. 题目要求n个数,若将该点割掉,还有多少对有序对,满足x,y不连通. 注意问的是有序对,所以x和y,与y和x是两种情况. 若该点不是割点,很明显把该点割掉以 ...

  5. CodeForces - 1263A Sweet Problem(思维,水题)

    题目链接:点击查看 题目大意:给出三种颜色的糖果,分别表示为r,g,b,现在Tanya每天可以吃两个不同颜色的糖果,问最多可以吃多少天 题目分析:大水题一个,但自己真的蠢,一开始思路混乱,写了一大堆乱 ...

  6. Codeforces Round #712 (Div. 2) E. Travelling Salesman Problem 思维转换

    传送门 文章目录 题意: 思路: 题意: 给你nnn个点,从iii到jjj的花费是max(ci,aj−ai)max(c_i,a_j-a_i)max(ci​,aj​−ai​),求从111开始经过每个点再 ...

  7. AT2382 A or...or B Problem

    传送门 还是看题解的啦 先考虑一个显而易见的结论:A和B二进制下最高的几位相同是没用的(设去掉的那些位之和为sum) 然后我们设\(d\)为二进制下从高位到低位第一位不相同的,\(k\)为B从高位到低 ...

  8. 0x66.图论 - Tarjan算法与无向图连通性

    目录 一.无向图的割点与桥 割点 桥/割边 时间戳 搜索树 追溯值 二.割边判定法则 三.割点判定法则 1.luogu P3388 [模板]割点(割顶) 2.luogu P3469 [POI2008] ...

  9. ICPC2019南昌区域赛

    ICPC2019南昌区域赛 题号 题目 知识点 难度 A 9102 B A Funny Bipartite Graph 状压dp+思维 稳银快金 C And and Pair 二项式定理 快铜 D B ...

最新文章

  1. 配置 php-fpm 监听的socket
  2. 【人物】李开复:未来属于创新者和小公司
  3. 光机学院计算机系,计算机系召开第十二届科技节闭幕式
  4. MongoDB+java+spirng+morphia
  5. Keychain的介绍和使用
  6. Python学习中出现的一些问题
  7. ak和sk怎么认证 海康威视_公有云API的认证方式:AK/SK 简介
  8. iCloud 是什么
  9. OpenCV2:Mat介绍及常见用法
  10. 机器人走进开放源代码
  11. icd11中文版精神障碍pdf_精神与行为障碍类别目录(ICD-11)(借鉴资料)
  12. 阿里云服务器怎么用?阿里云服务器新手使用教程
  13. nexus+4+android+6,Android 4.1.1+Nexus S安装BT5
  14. Linux怎么改引导方式为uefi,联想电脑怎么将uefi改成legacy启动|uefi改成legacy引导模式...
  15. java 定时凌晨_java Timer 定时每天凌晨1点执行任务
  16. BIOS/固件设置中禁用Intel VT-x
  17. sqlserver 2008 Express离线安装包
  18. 3.7 Feature envy(依恋情结)
  19. 普通函数和箭头函数中的this指向
  20. 基于arduino与raspberry的远程数据采集系统

热门文章

  1. Jacobian矩阵的计算(三维重建task2-4)
  2. matlab 2014B ,simulink-simscape 创建 物理 倒立摆-动画-pid 控制 傻瓜教程-100%学会
  3. 程序设计基础(CC++) 戴波、张东祥 第四章 数组与结构 编程作业
  4. OpenCV项目开发实战--对图像种的对象进行无缝克隆-附Python、C++的代码实现
  5. 我的世界中国版怎么更改java_我的世界中国版Java 不删档测试问题指引
  6. 从大厂到创业公司,管理上需要怎样转变?
  7. mysql plugin filed_宝塔面板数据库启动不了:plugin 'InnoDB' failed. | 小朱笔记
  8. 发票管理用户端隐私权政策
  9. 从计算机复制u盘慢怎么解决方法,U盘传输速度慢怎么办 u盘传文件慢的解决办法-电脑教程...
  10. python文档初学者小册子【自用长更】