D - Round Numbers

Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u

Description

The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, Paper, Stone' (also known as 'Rock, Paper, Scissors', 'Ro, Sham, Bo', and a host of other names) in order to make arbitrary decisions such as who gets to be milked first. They can't even flip a coin because it's so hard to toss using hooves.

They have thus resorted to "round number" matching. The first cow picks an integer less than two billion. The second cow does the same. If the numbers are both "round numbers", the first cow wins,
otherwise the second cow wins.

A positive integer N is said to be a "round number" if the binary representation of N has as many or more zeroes than it has ones. For example, the integer 9, when written in binary form, is 1001. 1001 has two zeroes and two ones; thus, 9 is a round number. The integer 26 is 11010 in binary; since it has two zeroes and three ones, it is not a round number.

Obviously, it takes cows a while to convert numbers to binary, so the winner takes a while to determine. Bessie wants to cheat and thinks she can do that if she knows how many "round numbers" are in a given range.

Help her by writing a program that tells how many round numbers appear in the inclusive range given by the input (1 ≤ Start < Finish ≤ 2,000,000,000).

Input

Line 1: Two space-separated integers, respectively Start and Finish.

Output

Line 1: A single integer that is the count of round numbers in the inclusive range Start.. Finish

Sample Input

2 12

Sample Output

6

解题:乱搞,找规律,毛线数位dp啊,搞死人

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <climits>
#include <vector>
#include <queue>
#include <cstdlib>
#include <string>
#include <set>
#define LL long long
#define INF 0x3f3f3f3f
using namespace std;
LL dp[] = {,,,,};
LL c[][];
void init() {
int i,j;
for(i = ; i <= ; i++) {
c[i][] = c[i][i] = ;
for(j = ; j < i; j++)
c[i][j] = c[i-][j-]+c[i-][j];
}
for(i = ; i <= ; i++){
for(j = ; j < i-j- ; j++)
dp[i] += c[i-][j];
dp[i] += dp[i-];
}
}
LL analysis(int x,int y,int base){
int i,j;
LL ans = ;
for(i = ; i+x <= base-i+y; i++)
ans += c[base][i];
return ans;
}
LL cal(int x) {
if(x == || x == ) return ;
int d[],i,len,one = ,zero = ;
LL ans = ;
for(len = ; x; x >>= ,len++) {
d[len] = x&;
}
ans += dp[len-];
one++;
for(i = len-; i > ; i--) {
if(d[i]) {
ans += analysis(one,zero+,i);
one++;
} else zero++;
}
if(d[]){
if(one == zero || one == zero+) ans += ;
else if(one < zero) ans += ;
one++;
}else zero++;
if(one >= && d[] == && one <= len - one) ans++;
return ans;
}
int main() {
init();
int a,b,i = ;;
while(~scanf("%d %d",&a,&b))
printf("%I64d\n",cal(b)-cal(a-));
return ;
}

最新文章

  1. Python中的if __name__=&#39;__main__&#39;语句的作用
  2. django--静态文件(九)
  3. 轻松自动化---selenium-webdriver(python) (二)
  4. 指针,&amp;的用法
  5. [原]对Linux环境下任务调度一点认识
  6. POJ 3279
  7. 一个layer可以跟着画完的线移动ios程序 好玩啊。
  8. 【HDOJ】4455 Substrings
  9. HDU 4288 Coder(线段树)
  10. PHP 用户注册与登录
  11. Codeforces Round#1
  12. POJ 3190 Stall Reservations (优先队列)C++
  13. java常量池詳解
  14. ACM 继续畅通工程
  15. 【RL-TCPnet网络教程】第27章 DNS域名系统基础知识
  16. Java开发知识之Java的继承多态跟接口*
  17. CMDB服务器管理系统【s5day91】:资产采集相关问题
  18. jedis单机版应用
  19. window10 matlabR2015b 安装minGw
  20. Confluence 6 Oracle 创建数据库用户

热门文章

  1. BFS 2015百度之星初赛2 HDOJ 5254 棋盘占领
  2. 百度地图API简单初始化
  3. Vue checkbox默认值改变
  4. 【学习笔记】深入理解js原型和闭包(16)——完结
  5. vmware桥接模式下主机有多个网卡导致虚拟机网络不通
  6. iOS 创建xcode插件
  7. Android小玩意儿-- 从头开发一个正经的MusicPlayer(二)
  8. Sql Server 2008R2升级 Sql Server 2012 问题
  9. redis源码分析之事务Transaction(下)
  10. ubuntu破解密码方法