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

首先,直接枚举肯定是会超时的,毕竟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. ni

    坚强歌词 马天宇 - 坚强 天使的翅膀挥动着的光芒一路走来学会了坚强每一次你努力认真的模样让我很欣赏 雨天的路上会有一缕阳光温暖被淋湿的希望再小的河也能汇成海洋让我去远航 一路上陪伴我的目光是最感动的 ...

  2. oc语言--面向对象的三大特性

    一.封装 1.什么是封装 在程序上,隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将对象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的 ...

  3. 开源欣赏wordpress之post.php

    switch($action) { case 'postajaxpost': case 'post': case 'post-quickpress-publish': case 'post-quick ...

  4. excel内容转成xml

    简单记录下如何将excel中的一个表格内容转成xml格式的文件. excel菜单栏中的"开发工具"下有专门处理xml的模块,如下图. 如果你的excel中看不到"开发工具 ...

  5. 【转】GCC警告选项例解 -- 不错

    原文网址:http://blog.csdn.net/hcx25909/article/details/7383716 程序员是追求完美的一族,即使是一般的程序员大多也都不想看到自己的程序中有甚至那么一 ...

  6. Asp.NET MVC 技术参考:http://kb.cnblogs.com/zt/mvc/

    Asp.NET MVC 技术参考:http://kb.cnblogs.com/zt/mvc/

  7. Remove Nth Node From End of List 解答

    Question Given a linked list, remove the nth node from the end of list and return its head. For exam ...

  8. Pattern | CLiPS

    Pattern | CLiPS Pattern Pattern is a web mining module for the Python programming language. It has t ...

  9. sh_脚本语法

    介绍: 1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 当编写脚 ...

  10. 关于map与set的一点理解;

    set代码: #include<stdio.h> #include<set> using namespace std; int main(){ set<int>m; ...