Uvalive-4494-(数位dp)
题意:求a->b中的二进制出现过多少个1,很显然的数位dp,对于某一位来说,如果这位是0,那么dp[i]=dp[i-1] 如果这一位是1 那么dp[i]=dp[i-1]+1<<(pos-1)+(后缀+1);
dp[pos][now] /pos表示当前的位,now表示现在是1还是0
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
const int maxn=;
typedef long long LL;
using namespace std;
int a,b;
int icase;
LL dp[maxn+][];
LL dig[maxn+];
int prefix[maxn+];
LL dfs(int pos,int limit,int now,int num){
if(pos<=) return now==;
if(dp[pos][now]!=-&&!limit) return dp[pos][now];
int end=limit?dig[pos-]:;
LL ret=;
if(!limit&&now==) {
ret+=(<<(pos-));
}
if(limit&&now==) {
ret+=(prefix[pos-]+);
}
for(int i=;i<=end;i++){
ret+=dfs(pos-,limit&&(i==end),i,num);
}
if(!limit)
return dp[pos][now]=ret;
else return ret;
}
void solve(){
memset(prefix,,sizeof(prefix));
memset(dp,-,sizeof(dp));
memset(dig,,sizeof(dig));
int len=;
int x=a;
int y=b;
while(x){
dig[++len]=x%;
if(x%){
prefix[len]|=(<<(len-));
}
prefix[len]+=prefix[len-];
x/=;
}
LL ans1=;
if(a>)
ans1=dfs(len,,,a)+dfs(len,,,a);
else ans1=;
memset(prefix,,sizeof(prefix));
memset(dig,,sizeof(dig));
memset(dp,-,sizeof(dp));
len=;
while(y){
dig[++len]=y%;
if(y%){
prefix[len]|=(<<(len-));
}
prefix[len]+=prefix[len-];
y/=;
}
LL ans2=;
ans2=dfs(len,,,b)+dfs(len,,,b);
printf("Case %d: %lld\n",++icase,ans2-ans1);
}
int main()
{
while(scanf("%d%d",&a,&b)!=EOF&&(a||b)){
a--;
solve();
}
return ;
}
Uvalive-4494-(数位dp)的更多相关文章
- UVALive - 6575 Odd and Even Zeroes 数位dp+找规律
题目链接: http://acm.hust.edu.cn/vjudge/problem/48419 Odd and Even Zeroes Time Limit: 3000MS 问题描述 In mat ...
- UVALive 4877 Non-Decreasing Digits 数位DP
4877 Non-Decreasing Digits A number is said to be made up ofnon-decreasing digitsif all the digits t ...
- UVALive - 6872 Restaurant Ratings 数位dp
题目链接: http://acm.hust.edu.cn/vjudge/problem/113727 Restaurant Ratings Time Limit: 3000MS 题意 给你一个长度为n ...
- 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP
[BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...
- bzoj1026数位dp
基础的数位dp 但是ce了一发,(abs难道不是cmath里的吗?改成bits/stdc++.h就过了) #include <bits/stdc++.h> using namespace ...
- uva12063数位dp
辣鸡军训毁我青春!!! 因为在军训,导致很长时间都只能看书yy题目,而不能溜到机房鏼题 于是在猫大的帮助下我发现这道习题是数位dp 然后想起之前讲dp的时候一直在补作业所以没怎么写,然后就试了试 果然 ...
- HDU2089 不要62[数位DP]
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 数位DP GYM 100827 E Hill Number
题目链接 题意:判断小于n的数字中,数位从高到低成上升再下降的趋势的数字的个数 分析:简单的数位DP,保存前一位的数字,注意临界点的处理,都是套路. #include <bits/stdc++. ...
- 数位dp总结
由简单到稍微难点. 从网上搜了10到数位dp的题目,有几道还是很难想到的,前几道基本都是模板题,供入门用. 点开即可看题解. hdu3555 Bomb hdu3652 B-number hdu2089 ...
- 数位DP入门
HDU 2089 不要62 DESC: 问l, r范围内的没有4和相邻62的数有多少个. #include <stdio.h> #include <string.h> #inc ...
随机推荐
- 设置document.domain实现js跨域注意点
转自:http://www.cnblogs.com/fsjohnhuang/archive/2011/12/07/2279554.html document.domain 用来得到当前网页的域名.比如 ...
- (转)select、poll、epoll之间的区别总结[整理]
select,poll,epoll都是IO多路复用的机制.I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作.但select ...
- 【坑坑坑坑坑】fwrite没有把数据写到文件中???
原文:https://blog.csdn.net/kuaidfkuai/article/details/45918025 <unix环境高级编程>中介绍标准IO: 标准IO流操作读写普通文 ...
- poj1050最大矩阵和——暴力枚举
题目:http://poj.org/problem?id=1050 s[i][j]数组记录以点(i,j)为右下角.(1,1)为左上角的子矩阵内部和: 枚举子矩阵左上角和右下角,取最大值即可. 代码如下 ...
- zynq基础
zynq交叉编译环境设置 OpenCV在Zedboard上的移植 ubuntu 下串口调试工具 minicom安装与配置
- 非常好的LINUX学习者博客
http://blog.csdn.net/qq_21794823/article/category/6496200
- JavaScript总结(1)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- 03_通过OpenHelper获取SqliteDatabase对象
MyOpenHelper openHelper = new MyOpenHelper(this); 类似于java的File file = new File();只是声明这个东西,但是文件还并没有真正 ...
- 面试题: mysql数据库 已看1 索引和事务 没用
mysql数据库面试总结 2017年09月04日 00:11:40 阅读数:151 结合网上大神还有自己面试经历,收集的总结Mysql面试题,方便自己准备面试: mysql一个永远都复习不完,尽量总结 ...
- Jquery中的toggle()方法
Jquery中的toggle()方法,有一次在看别人写的Jquery插件时,发现对toggle有如下使用 search.pagePrevious.toggle(data.pageNumber > ...