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)的序 ...
随机推荐
- Servlet 快速开始 表单中文字段
req.getParameter | getParameterValue 一大特点是 返回null表示没有. [web.xml] <servlet> <serlvlet-mappin ...
- Socket与TCP,UDP
什么是socket 简单来说是IP地址与端口的结合协议(RFC 793) 一种地址与端口的结合描述协议 TCP/IP协议的 相关API的总称:是网络api的集合实现 涵盖了:Stream Socket ...
- sqlserver分组统计合并
---分组partition by;统计:Count();合并:for xml path('') with cte as( select COUNT(t2.Id) OVER(PARTITION BY ...
- 剑指Offer-表示数值的字符串
题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100","5e2","-123","3.1 ...
- ubuntu14.04 Samba服务无法访问 网络名不再可用的问题
参考链接 : https://blog.csdn.net/liuyixjtu/article/details/54575514
- Python基础6 面向对象
本节内容 面向对象编程介绍 为什么要面向对象开发? 面向对象的特性:封装,继承,多态 类,方法 引子 假设现在我们需要开发一款简单的游戏,譬如叫做人兽战争.我们需要简单的2个角色,一个人,一个怪兽,而 ...
- yum2
首先yum源的主配置文件为/etc/yum.conf文件.这个文件一般不用动,而我们配置具体的各个yum源的配置文件在/etc/yum.repo.d目录下,所有以repo结尾的文件都是yum源配置文件 ...
- DeepLearning.ai-Week1-Convolution+model+-+Step+by+Step
1 - Import Packages import numpy as np import h5py import math import matplotlib.pyplot as plt %matp ...
- Javascript - ExtJs - Itemselector
引入扩展文件 Extjs4.2根目录下: examples \ ux \ css \ images (这是选择按钮的图片资源) examples \ ux \ css \ ItemSelector.c ...
- MySql 在cmd下的学习笔记 —— 有关储存过程的操作(procedure)
我们把若干条sql封装取来,起个名字------把此过程存储在数据库中叫存储过程 调用procedure 储存过程是可以变成的,意味着可以使用变量,表达式,控制结构 来完成复杂的功能 声明变量 pro ...