先转化出求 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的更多相关文章

  1. HNU 2015暑期新队员训练赛2 H Blanket

    把每个 bi *x + ri ( 0 <= ri <= ai)标记, 输出被标记 0 – N 次的个数 #include<iostream> #include<cstdi ...

  2. 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 ...

  3. 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 ...

  4. hdu 5358 First One 2015多校联合训练赛#6 枚举

    First One Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Tota ...

  5. hdu 5361 2015多校联合训练赛#6 最短路

    In Touch Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total ...

  6. 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 ...

  7. 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   ...

  8. HDU 5358(2015多校联合训练赛第六场1006) First One (区间合并+常数优化)

    pid=5358">HDU 5358 题意: 求∑​i=1​n​​∑​j=i​n​​(⌊log​2​​S(i,j)⌋+1)∗(i+j). 思路: S(i,j) < 10^10 & ...

  9. HDU 5371 (2015多校联合训练赛第七场1003)Hotaru&#39;s problem(manacher+二分/枚举)

    pid=5371">HDU 5371 题意: 定义一个序列为N序列:这个序列按分作三部分,第一部分与第三部分同样,第一部分与第二部分对称. 如今给你一个长为n(n<10^5)的序 ...

随机推荐

  1. springboot(二十二)spring-boot使用AOP

    https://blog.csdn.net/w05980598/article/details/79053209

  2. 传入mybatis的xml为Long型时报There is no getter for property named 'VARCHAR' in

    修改前   <insert id="insert" parameterType="com.taotao.pojo.TbContent" >    i ...

  3. Nginx正反向代理、负载均衡等功能实现配置

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   系统环境: VirtualBox Manager Centos6.4 nginx1.10.0 IP对应的机器名: IP ...

  4. python 爬虫得到网页的图片

    import urllib.request,os import re # 获取html 中的内容 def getHtml(url): page=urllib.request.urlopen(url) ...

  5. 关于MySQL数据库——增删改查语句集锦

    一.基本的sql语句 CRUD操作:create 创建(添加)read 读取update 修改delete 删除 1.添加数据insert into Info values('p009','张三',1 ...

  6. 关于利用PHP访问MySql数据库的逻辑操作以及增删改查实例操作

    PHP访问MySql数据库 <?php //造连接对象$db = new MySQLi("localhost","root","",& ...

  7. UIScrollView嵌套的完美解决方案

    UIScrollView嵌套的完美解决方案 做iOS开发,不可避免的会遇到UIScrollView的嵌套问题,之前也曾遇到过,吭哧吭哧做完了,效果不理想,和产品大战好几回合,就那样了.不可避免的,又一 ...

  8. oracle 重建索引以及导出所有的索引脚本(可以解决还原数据库文件时先还原数据,在重新用脚本创建索引)

    导出数据库备份文件 1. 备份服务器数据,采用并行方式,加快备份速度(文件日期根据具体操作日期修改) expdp jhpt/XXXX directory=databackup dumpfile=dpf ...

  9. byte数组和int之间相互转化的方法

    Java中byte数组和int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送者接收的数据都是byte数组,但是int类型是4个byte组成的,如何把一个整形in ...

  10. java基础_0204:运算符

    掌握Java中标识符的定义: 掌握Java中数据类型的划分以及基本数据类型的使用原则: 掌握Java运算符的使用: 掌握Java分支结构.循环结构.循环控制语法的使用: 掌握方法的定义结构以及方法重载 ...