poj 3252 Round Numbers(数学)
链接:http://poj.org/problem?id=3252
题意:一个数写成二进制,0不少于1就是round number,求给定区间内round number的个数。
分析:显然第一步转化为0到n的round number个数。。设n写成二进制有len位,第一位取0时,后面只要满足0的个数要求就行了,不用考虑是否比n大。。可以先预处理一下长度不大于len的round number个数,记做t[len],t[len]=t[len-1]+∑C(len-1 k) , (k=0,1,...,len/2-1)。
然后第一位取1时,往后是0的位只能取0,遇到第一个1时,再分情况考虑这一位为1和为0,然后考虑还需要多少位,往下递归即可。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 const int maxn=35; 6 int C[maxn][maxn],sum[maxn][maxn][maxn],t[maxn]; 7 int start,finish; 8 void CalC(){ 9 for(int i=1;i<maxn;i++) 10 C[i][0]=C[i][i]=1; 11 for(int i=2;i<maxn;i++){ 12 for(int j=1;j<i;j++){ 13 C[i][j]=C[i-1][j]+C[i-1][j-1]; 14 } 15 } 16 for(int i=0;i<maxn;i++){ 17 for(int s=0;s<=i;s++){ 18 sum[i][s][s]=C[i][s]; 19 for(int t=s+1;t<=i;t++){ 20 sum[i][s][t]=sum[i][s][t-1]+C[i][t]; 21 } 22 } 23 } 24 } 25 void CalT(){ 26 t[1]=1; 27 for(int i=2;i<maxn;i++){ 28 t[i]=t[i-1]+sum[i-1][0][(i-2)/2]; 29 } 30 } 31 int f(int n,int c,int len){ 32 if(c==0)return 1; 33 if(c>=len)return n+1; 34 int t=len-1; 35 while(t>=0&&(n&(1<<(t-1)))==0){ 36 t--; 37 } 38 return f(n-(1<<(len-1)),c-1,t)+sum[len-1][0][c]; 39 } 40 int solve(int n){ 41 if(n==0)return 1; 42 int k=1<<30,len=31; 43 while((k&n)==0){ 44 k>>=1;len--; 45 } 46 int l=len-1; 47 while(l>=0&&(n&(1<<(l-1)))==0){ 48 l--; 49 } 50 return t[len-1]+f(n-(1<<(len-1)),(len-2)/2,l); 51 } 52 //bool Is_round(int n){ 53 // int k=1,a=0,b=0; 54 // while(k<=n){ 55 // if(k&n)a++; 56 // else b++; 57 // k<<=1; 58 // } 59 // if(a<=b)return true; 60 // return false; 61 //} 62 //int test(int n){ 63 // int count=0; 64 // for(int i=1;i<=n;i++){ 65 // if(Is_round(i))count++; 66 // } 67 // return count+1; 68 //} 69 int main(){ 70 CalC(); 71 CalT(); 72 int n; 73 // while(cin>>n){ 74 // cout<<solve(n)<<' '<<test(n)<<endl; 75 // } 76 cin>>start>>finish; 77 cout<<solve(finish)-solve(start-1)<<endl; 78 return 0; 79 }
转载于:https://www.cnblogs.com/7391-KID/p/7282581.html
poj 3252 Round Numbers(数学)相关推荐
- POJ 3252 Round Numbers
解题思路: 1. d[i][j]表示需i位二进制表示且1的个数不大于j(首位为1)的数的总和 2. 对数a,假设其二进制需要i位表示 a)求不大于a round Number总和 Line 6~8 b ...
- POJ - 3252 Round Numbers(数位dp)
题目链接:点击查看 题目大意:规定一个数如果二进制中0的个数大于等于1的个数,则这个数称为"整数",问闭区间a,b中有多少个整数 题目分析:数位dp,dp[pos][c0][c1] ...
- pku 3252 Round Numbers 组合数学 找规律+排列组合
http://poj.org/problem?id=3252 看了discuss里面的解题报告才明白的,这个解题报告太强大了:http://poj.org/showmessage?message_id ...
- Poj 1338 Ugly Numbers(数学推导)
一.题目大意 本题要求写出前1500个仅能被2,3,5整除的数. 二.题解 最初的想法是从1开始检验该数是否只能被2,3,5整除,方法是这样的,对于一个数,如果它能被2整除,就除以2,如果它能被3整除 ...
- Round Numbers POJ - 3252(数位dp+判断前导零)
题意 求二进制表示中0的个数大于1的数的个数. 题目 The cows, as you know, have no fingers or thumbs and thus are unable to p ...
- 牛客假日团队赛5 F 随机数 BZOJ 1662: [Usaco2006 Nov]Round Numbers 圆环数 (dfs记忆化搜索的数位DP)...
链接:https://ac.nowcoder.com/acm/contest/984/F 来源:牛客网 随机数 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6 ...
- Round Numbers
题意/Description: 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁先挤奶的顺序.她们甚至也不能通过仍硬币的方式. 所以她们通过&q ...
- BZOJ 1662: [Usaco2006 Nov]Round Numbers 圆环数(数位DP+恶心细节)
BZOJ 1662: [Usaco2006 Nov]Round Numbers 圆环数 Time Limit: 5 Sec Memory Limit: 64 MB Description 正如你所知 ...
- bzoj 1662: [Usaco2006 Nov]Round Numbers 圆环数(枚举)
1662: [Usaco2006 Nov]Round Numbers 圆环数 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 413 Solved: 2 ...
最新文章
- MySQL删除匿名用户,保证登录安全
- mysql b 树删除操作,B-树的删除过程介绍
- python好学吗mooc中文网-用Python玩转数据
- python sklearn下载了但是引用失败_关于python:导入sklearn时出错
- linux下 tar解压 gz解压 bz2等各种解压文件使用方法
- 递归求和的复习-计算m~n整数和
- 瑞幸咖啡自曝虚假交易 22 亿,App 反冲 TOP 1
- ViewPager之使用PagerTabStrip添加标题栏,实现滑动效果
- 浮点数规格化-不同基数的规格化
- 用 Flutter 写一个精美的登录页面(最新版)
- 移植交叉编译pcDuino + busybox 成功搭建最小linux系统
- EOJ 306 树上问题
- 二十、oracle pl/sql基础
- Iometer存储测试工具参数说明- 2 Access Specifications
- vue获取微信登陆权限_vue微信授权登录
- 西瓜书习题4.3 决策树
- Jarvis OJ BASIC 公倍数
- DNSPod十问梁定安: 工业互联网唤醒制造业的第二个春天
- 项目管理(PMP)项目沟通管理
- 计算机四级网络工程师属于什么职称,计算机四级网络工程师和软考网络工程师有什么区别...
热门文章
- 程序无法启动计算机丢失,没法启动程序,说是计算机丢失user32.dll
- python 编程服务_Python编写Windows Service服务程序
- python自动化办公是什么_python自动化办公?学这些就够用了
- linux多cpu运行python脚本,linux系统使用python获取cpu信息脚本分享
- java中两个xml文件内容拼接_比较Java中2个XML文档的最佳方法
- 中科大计算机是一流学科吗,2016安徽省大学一流学科排行榜,中科大第一
- svd pca matlab,从SVD到PCA——奇妙的数学游戏
- java .class参数_java – 将.getClass()转换为类型参数
- oracle数据库连接不稳定,Oracle数据库自连接查询的缺点及解决方法
- java 鼠标拖动画矩形_java怎么实现鼠标在桌面拖动过程中 画 矩形的 功能?