hdu5969最大的位或(二进制思维)
来源:互联网 发布:外商投资网络支付机构 编辑:程序博客网 时间:2024/04/27 12:52
题意:
给你一个区间[l,r],从中取两个数,使得或值最大。
思路:
把左右区间转化为二进制排列,从高位开始比较,若出现不同,说明后面的数都能取到1(出现不同的情况,必定是右区间的位为1,左区间的位为0(因为l<=r),所以必能选出一个x(l<=x<=r),使得往后的位都为1)
代码:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <queue>#include <map>#include <vector>#include <cmath>using namespace std;typedef long long ll;const ll INF = 0x3f3f3f3f;const ll INFF = 0x3f3f3f3f3f3f3f3f;const ll mod = 1e9+7;int a[70],b[70];int main(){ int t; scanf("%d",&t); while(t--) { ll l,r; scanf("%lld%lld",&l,&r); for(int i = 63;i>=0;i--) { ll s = 1; s<<=i; if(s&l) a[i] = 1; else a[i] = 0; if(s&r) b[i] = 1; else b[i] = 0; } ll ans = 0; int j = 63; for(j = 63;j>=0;j--) { if(a[j]==b[j]) { ll s = 1; s<<=j; ans+=s*a[j]; } else break; } while(j>=0) { ll s = 1; s<<=j; ans += s; j--; } printf("%lld\n",ans); } return 0;}
阅读全文
1 0
- hdu5969最大的位或(二进制思维)
- hdu5969 最大的位或 二进制
- HDU5969:最大的位或(贪心,二进制)
- hdu5969最大的位或
- HDU5969-最大的位或
- HDU5969 最大的位或(贪心)
- hdu5969-贪心&思维&证明-最大的异或
- HDOJ-----5969---最大的位或---思维
- HDU 5969 最大的位或 (思维)
- HDU 5969 最大的位或 思维题
- HDU 5969 最大的位或 (思维题 贪心)
- hdu 5969 最大的位或(二进制规律运算)
- HDU:5969 最大的位或(数学,二进制)
- 最大的位或
- 最大的位或
- HDU5969(二进制计算)
- HDU 5969 最大的位或 —— 贪心 + 二进制的理解
- HDU最大的位或
- 约瑟夫环
- MySQL 5.7 安装问题记录
- linux 5
- 算法学习之递归--汉诺塔问题
- 算术表达式的转换
- hdu5969最大的位或(二进制思维)
- 约瑟夫环问题的数组解法与单链表解法
- 一些常用的集合工具的代码块(缓慢更新XD)
- 数字
- 添加Cloud广告
- 【龙队的胡策】训练8.21(?+dp+lct)
- HDU --- 5446 Unknown Treasure 数论综合【Lucas定理 + 中国剩余定理 + 快速乘 + 思维】
- PHP面试(笔试)题
- json解析时遇到英文双引号报错解决