HNU 2015暑期新队员训练赛2 B Combination
先转化出求 Cnr中有多少奇数 其实就是 (n 的二进制数中 1 的个数为 k ,则这个奇数为 2 ^ k)
因为数很大, 故要快速求出区间的奇数
然后求 0 – low-1 的奇数, 0- high 的奇数 ,相减既是结果
求 0 – N 中 Cnr 的奇数
通过上图可以快速求出 1 ---- (2^N)-1的个数,其他数则可以用迭代的方式求出来
(代码比赛写的有点残)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<stack>
//#include<bits/std c++.h>
using namespace std;
typedef __int64 LL;
typedef unsigned long long ULL;
const LL MOD = 1e7 + ;
const LL maxn = 1e6 + ;
ULL Num[] = {,,,};
LL SumL = , SumR = ;
ULL Pow(ULL a,ULL b)
{
ULL ret = ;
while(b)
{
if(b & ) ret = ret * a;
a= a*a;
b >>= ;
}
return ret;
}
/*ULL GetSum(ULL low, ULL high)
{
ULL sum = high - low + 1;
for(ULL E = low; E <= high; ++E)
{
for(ULL r = 1; r <= E; ++r)
if((E & r) == r) sum++;
}
printf("%I64u\n",sum);
}*/ int main()
{
ULL low, high;
while(scanf("%I64u%I64u",&low,&high) != EOF && (high + low))
{
SumL = , SumR = ;
//GetSum(low,high);
ULL K = ;
if(low == ) ;
else {
low --;
if(low <= ) SumL = Num[low];
else {while(low > )
{
ULL cnt = ;
ULL tmp = low; while(tmp) {cnt++, tmp >>= ;}
SumL += Pow((ULL),cnt-) * Pow((ULL),K++);
low -= Pow((ULL),cnt-);
} SumL += Num[low] * Pow((ULL),K);
}
} ////////////
if(high ==) ;
else {
if(high <= ) SumR = Num[high];
else {K = ;
while(high > )
{
ULL cnt = ;
ULL tmp = high; while(tmp) {cnt++, tmp >>= ;}
SumR += Pow((ULL),cnt-) * Pow((ULL),K++);
high -= Pow((ULL),cnt-);
} SumR += Num[high] * Pow((ULL),K);
}}
cout << ULL(SumR-SumL) << endl;
}
}
HNU 2015暑期新队员训练赛2 B Combination的更多相关文章
- HNU 2015暑期新队员训练赛2 H Blanket
把每个 bi *x + ri ( 0 <= ri <= ai)标记, 输出被标记 0 – N 次的个数 #include<iostream> #include<cstdi ...
- hdu 5381 The sum of gcd 2015多校联合训练赛#8莫队算法
The sum of gcd Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) T ...
- 2015多校联合训练赛 hdu 5308 I Wanna Become A 24-Point Master 2015 Multi-University Training Contest 2 构造题
I Wanna Become A 24-Point Master Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 ...
- hdu 5358 First One 2015多校联合训练赛#6 枚举
First One Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Tota ...
- hdu 5361 2015多校联合训练赛#6 最短路
In Touch Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total ...
- 2015多校联合训练赛hdu 5301 Buildings 2015 Multi-University Training Contest 2 简单题
Buildings Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Tota ...
- 2015多校联合训练赛 Training Contest 4 1008
构造题: 比赛的时候只想到:前面一样的数,后面 是类似1,2,3,4,5,6....t这 既是:t+1,t+1...,1,2,3,...t t+1的数目 可能 很多, 题解时YY出一个N 然后对N ...
- HDU 5358(2015多校联合训练赛第六场1006) First One (区间合并+常数优化)
pid=5358">HDU 5358 题意: 求∑i=1n∑j=in(⌊log2S(i,j)⌋+1)∗(i+j). 思路: S(i,j) < 10^10 & ...
- HDU 5371 (2015多校联合训练赛第七场1003)Hotaru's problem(manacher+二分/枚举)
pid=5371">HDU 5371 题意: 定义一个序列为N序列:这个序列按分作三部分,第一部分与第三部分同样,第一部分与第二部分对称. 如今给你一个长为n(n<10^5)的序 ...
随机推荐
- 微信小程序 TOP100 榜单
8 月 12 日,阿拉丁数据统计平台发布了国内第一份小程序 TOP100 榜单,摩拜单车成为全榜第一! 该榜单数据来源于阿拉丁小程序统计平台检测.合作.如有赞等,并经过企业电话调研和实地走访企业等校准 ...
- 三、文件IO——系统调用
3.1 文件描述符 文件IO 系统调用是不带缓存的,文件 I/O 系统调用不是 ANSI C 的组成部分,是 POSIX 的组成部分. 系统调用与C库: C库函数的IO 的底层还是调用系统调用 I/O ...
- luogu 1484\1792 种树 奇怪的贪心可反悔
1484 种树 此版本是线性的,那么根据链表维护即可: 构建新点,点的左右分别是原整个区间的前驱及后继,再正常维护即可 注意两个版本的维护有所不同 第二个版本的维护直接将左右两点删除 1792 种树2 ...
- 简单linux命令1
1. cat 一次显示整个文件: cat filename 从键盘创建一个文件: cat> filename 将文件合并: cat file1 file2 > filename 2. ...
- pyqt5-控件的显示与隐藏
只有父控件显示,子控件才能显示 setVisible(bool) 设置控件是否可见 button.setVisible(True) True 可见 setHidden(bool) ...
- file图片上传之前先预览
链接:https://www.cnblogs.com/tandaxia/p/5125275.html 记得以前做网站时,曾经需要实现一个图片上传到服务器前,先预览的功能.当时用html的<inp ...
- Linux基础学习【规则与安装】
一.主分区.扩展分区与逻辑分区的特性: 主分区与扩展分区最多可以有4个(硬盘的限制) 扩展分区最多只能有1个 逻辑分区是由扩展分区持续切割出来的分区 能够被格式化后作为数据访问的分区为主分区和逻辑分区 ...
- 2017CCPC秦皇岛 H题Prime Set&&ZOJ3988
题意: 定义一种集合,只有两个数,两个数不同且加起来为素数.要从n个数里抽出数字组成该集合(数字也可以是1~n,这个好懵圈啊),要求你选择最多k个该种集合组成一个有最多元素的集合,求出元素的数量. 思 ...
- python 08
函数 函数定义: 你可以定义一个由自己想要功能的函数,以下是简单的规则: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号(). 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于 ...
- K - Subarrays OR Gym - 102152K (思维)
题目链接: K - Subarrays OR Gym - 102152K 题目大意:T组测试样例,然后n个数,让你求每一个l,r中有多少个不同的异或值. 具体思路: 对于(1,i)这个区间, 我们当前 ...