先贴代码,以后再写题解。。。

首先,直接枚举肯定是会超时的,毕竟n就有10^9那么多。。。

对于每个数,我们先把它转化为二进制;例:21-->10101;

对于00001~10101,可以分为几个部分:

00001~10000;

10001~10100;

10101

因为对于每个数,从最右边的1截断,于是就可以理解为为:

00001~10000:;

001~100;

1;

设s[i]为二进制从右边数第 i+1 个数为1 (且其他数都为0)的lowbit sum;

则 s[i]=s[i-1]*2+2^i-2^(i-1);

则lowbit sum(21)=s[0]+s[2]+s[4];

设i=4;即 10000;

可分为 :

00001~01000   s[i-1];

01001~01111   s[i-1]-lowbit(01000)=s[i-1]-2^(i-1);  (从最右边的1截断,即可理解为 00001~00111 )

10000       lowbit(10000)=2^i;

 #include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std; typedef long long ll; ll s[]; ll init (int n){
if (s[n])
return s[n];
s[n]=init (n-)*-(<<(n-))+(<<n);//cout<<s[n]<<" ";
return s[n];
} int main (){
int n; //while (cin>>n&&n) cout<<(1024>>n)<<endl;
ll ans=;
int temp=;
memset (s,,sizeof s);
s[]=;
init (); //for (int i=0;i<=30;i++) cout<<s[i]<<" ";
while (~scanf ("%d",&n)){
ans=;
for (int i=;n&&i<;i++) {
if (n&)
ans+=s[i];//cout<<ans<<endl;
n>>=;
//n/=2;
}
printf ("%lld\n",ans);
}
return ;
}

acdream 1154 Lowbit Sum的更多相关文章

  1. ACdream 1154 Lowbit Sum (数位DP)

    Lowbit Sum Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) SubmitSt ...

  2. ACdreamOJ 1154 Lowbit Sum (数字dp)

    ACdreamOJ 1154 Lowbit Sum (数位dp) ACM 题目地址:pid=1154" target="_blank" style="color ...

  3. ACDream - Lowbit Sum

    先上题目: C - Lowbit Sum Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others ...

  4. Lowbit Sum 规律

    Lowbit Sum Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) SubmitSt ...

  5. acdream 1148 GCD SUM 莫比乌斯反演 ansx,ansy

    GCD SUM Time Limit: 8000/4000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) SubmitStatis ...

  6. 【noip模拟】2048

     Time limit: 1000ms         Memory limits: 256MB Description 2048曾经是一款风靡全球的小游戏.今天,我们换一种方式来玩这个小游戏.现在, ...

  7. BZOJ2064:分裂——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=2064 Description 背景: 和久必分,分久必和... 题目描述: 中国历史上上分分和和次数 ...

  8. acdream Divide Sum

    Divide Sum Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) SubmitSta ...

  9. ACdream: Sum

    Sum Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) SubmitStatisticN ...

随机推荐

  1. Sunscreen(POJ 3614 优先队列)

    Sunscreen Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5898   Accepted: 2068 Descrip ...

  2. SPI 四种模式

    SPI时钟极性CPOL, = 0表示在没有数据传输时为低电平,= 1表示没有数据传输时为高电平. SPI时钟相位CPHA,= 0表示时钟的第一个沿更新数据.第二个沿锁存数据,= 1表示时钟的第一个沿锁 ...

  3. Headroom.js

    下载 Development (3.7kB) Production (1.7kB) Headroom.js 是什么? Headroom.js 是一个轻量级.高性能的JS小工具(不依赖任何工具库!),它 ...

  4. UESTC_基爷与加法等式 2015 UESTC Training for Search Algorithm & String<Problem C>

    C - 基爷与加法等式 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Subm ...

  5. Binary Tree Paths 解答

    Question Given a binary tree, return all root-to-leaf paths. For example, given the following binary ...

  6. Xshell不能连接SSH的解决

    异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 重新启动看看:/etc/init.d/ssh restart (/etc/ini ...

  7. 【剑指Offer学习】【面试题60:把二叉树打印出多行】

    题目:从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印一行. 解题思路 用一个队列来保存将要打印的结点.为了把二叉树的每一行单独打印到一行里,我们须要两个变量:一个变量表示在当前的 ...

  8. Jquery ui datepicker 设置日期范围,如只能隔3天

    最近的后台项目前端使用了jquery ui 日历控件自然就使用了jquery ui 的   datepicker 后台数据比较好大,一般是千万级的和百万级的关联,查询会很慢,所以后加想多加些过滤条件, ...

  9. Atom编辑器

    Atom介绍 Github的员工Nathan Sobo在Atom的博客中提到:”Sublime和TextMate十分方便,但是扩展性不足:另一方面,Emacs和 Vim扩展性很强却需要学习日程工作中很 ...

  10. Java - 注解 (Annotation)

    Java - 注解 (Annotation)   一.基本的 Annotation     > 使用 Annotation 时要在其前面增加 @符号,并把该 Annotation 当成一个修饰符 ...