Atcoder D - A or...or B Problem(思维)
题目链接:http://agc015.contest.atcoder.jp/tasks/agc015_d
题意:给出两个数b,a(a>=b)问{a,a+1,....,b}的集合内取任意数求或运算最多能够表示多少个数。
题解:数据很吧不用想着暴力,主要是位运算一般都会想到用二进制来写。具体的写法详见代码注释,不好表达。
#include <iostream>
#include <cstring>
using namespace std;
typedef long long ll;
ll getnum(ll A , ll B) {
int len1 , len2;//len1表示第一个大于A的2进制位数,len2表示第一个大于B的二进制位数
if(A == B) return 1;
for(len1 = 0 ; ((ll)1 << len1) <= A ; len1++);
for(len2 = 0 ; ((ll)1 << len2) <= B ; len2++);
if(len2 < len1) {
ll t;
for(t = len1 - 2 ; t >= 0 ; t--)
if(((ll)1 << t) & A) break;//先找到A中从大到小第二个1的位置。
if(t == -1) t = 0;
else t = ((ll)1 << (t + 1)) - 1;
if(B <= t + 1) return ((ll)1 << len1) - B;//显然能组成(1 << (len1 - 1)|t)~ B 的所有情况。然后最大能组合到(1 << len1 - 1)~(1 << (len1 - 1))|B)由于t+1比B大所以两个区间是相交的所以直接1 << len1 - B
return (((ll)1 << (len1 - 1) | t) - B + 1) + (((ll)1 << len1) - 1 - (((ll)1 << (len1 - 1)) + B) + 1);//同理只不过集合不相交,所以要分两个集合算一下 }
return getnum(A ^ ((ll)1 << (len1 - 1)) , B ^ ((ll)1 << (len2 - 1)));
//位数相同就去掉首位继续比较,去掉首位的方法就是求一下异或。
}
int main() {
ll A , B;
cin >> B >> A;
cout << getnum(A , B) << endl;
return 0;
}
Atcoder D - A or...or B Problem(思维)的更多相关文章
- AtCoder Beginner Contest 124 D - Handstand(思维+前缀和)
D - Handstand Time Limit: 2 sec / Memory Limit: 1024 MB Score : 400400 points Problem Statement NN p ...
- 【atcoder】Two Sequences [arc092 D](思维题)
题目传送门:https://arc092.contest.atcoder.jp/tasks/arc092_b 这场arc好难啊...这场感觉不像正常的arc...其实这道题还可以更早写出来的,但是蒟蒻 ...
- atcoder C - Snuke and Spells(模拟+思维)
题目链接:http://agc017.contest.atcoder.jp/tasks/agc017_c 题解:就是简单的模拟一下就行.看一下代码就能理解 #include <iostream& ...
- Atcoder E - Meaningful Mean(线段树+思维)
题目链接:http://arc075.contest.atcoder.jp/tasks/arc075_c 题意:问数组a有多少子区间平均值为k 题解:一开始考虑过dp,但是显然不可行,其实将每一个数都 ...
- CF990C Bracket Sequences Concatenation Problem 思维 第五道 括号经典处理题目
Bracket Sequences Concatenation Problem time limit per test 2 seconds memory limit per test 256 meg ...
- Atcoder Tenka1 Programmer Contest D: IntegerotS 【思维题,位运算】
http://tenka1-2017.contest.atcoder.jp/tasks/tenka1_2017_d 给定N,K和A1...AN,B1...BN,选取若干个Ai使它们的或运算值小于等于K ...
- D. Yet Another Subarray Problem 思维 难 dp更好理解
D. Yet Another Subarray Problem 这个题目很难,我比赛没有想出来,赛后又看了很久别人的代码才理解. 这个题目他们差不多是用一个滑动窗口同时枚举左端点和右端点,具体如下: ...
- FZU - 2038 -E - Another Postman Problem (思维+递归+回溯)
Chinese Postman Problem is a very famous hard problem in graph theory. The problem is to find a shor ...
- cf1088D. Ehab and another another xor problem(思维)
题意 题目链接 系统中有两个数\((a, b)\),请使用\(62\)以内次询问来确定出\((a, b)\) 每次可以询问两个数\((c, d)\) 若\(a \oplus c > b \opl ...
随机推荐
- 使用eclipse编写和运行java程序(基础)
1.首先java程序的运行你需要下载和安装JDK,这是java运行的必备环境. 2.在桌面上找到eclipes,双击打开. 3.在eclipes启动的过程中,会弹出一个窗口,让你填写java工作区的保 ...
- Spring文档学习
Spring文档学习 参考Spring Framework Documentation学习 1. IoC 容器 1.1 容器实例化 <beans> <import resource= ...
- 几大排序算法的Java实现(原创)
几大排序算法的Java实现 更新中... 注: 该类中附有随机生成[min, max)范围不重复整数的方法,如果各位看官对此方法有什么更好的建议,欢迎提出交流. 各个算法的思路都写在该类的注释中了,同 ...
- [TCP/IP]DNS解析
DNS解析主机的IP地址 host -t A www.baidu.com
- 基于hprose-golang创建RPC微服务
Hprose(High Performance Remote Object Service Engine) 是一款先进的轻量级.跨语言.跨平台.无侵入式.高性能动态远程对象调用引擎库.它不仅简单易用, ...
- Spring Boot + Security + JWT 实现Token验证+多Provider——登录系统
首先呢就是需求: 1.账号.密码进行第一次登录,获得token,之后的每次请求都在请求头里加上这个token就不用带账号.密码或是session了. 2.用户有两种类型,具体表现在数据库中存用户信息时 ...
- Streaming+Sparksql使用sql实时分析 rabbitmq+mongodb+hive
SparkConf sparkConf = new SparkConf()//此处使用一个链接切记使用一个链接否则汇报有多个sparkcontext错误 .setAppName("Spark ...
- Oracle delete和truncate实践操作之一
实践说明 本文章主要记录在Oracle中,delete和truncate进行数据删除之后,如何进行数据恢复.由于网上对delete和truncate的区别说明较多,此处不过多介绍两者区别. 注:由于环 ...
- 「雕爷学编程」Arduino动手做(10)——敲击传感器模块
37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...
- CSV Data Set Config 详细使用说明
JMeter 5.1.1 CSV Data Set Config 场景一:线程组中设置:单线程执行1次 如上图所示:变量名称为空时JMeter默认把new 1.txt的文件首行作为变量名 再如:此时A ...