HDU-2502 月之数 组合数
月之数
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2744 Accepted Submission(s): 1585
如果一个正整数m表示成二进制,它的位数为n(不包含前导0),寒月称它为一个n二进制数。所有的n二进制数中,1的总个数被称为n对应的月之数。
例如,3二进制数总共有4个,分别是4(100)、5(101)、6(110)、7(111),他们中1的个数一共是1+2+2+3=8,所以3对应的月之数就是8。
1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 using namespace std; 5 6 long long mix( long long n, long long m ) 7 { 8 long long res = 1; 9 for( long long i = 0; i < m; ++i )10 { // 一直用这个学来的方法来防止溢出11 res *= ( n - i );12 res /= ( i + 1 );13 }14 return res;15 }16 17 int main()18 {19 int T;20 scanf( "%d", &T );21 while( T-- )22 {23 long long N, ans = 1;24 scanf( "%I64d", &N );25 for( long long i = 1; i <= N - 1; ++i )26 {27 ans <<= 1;28 } 29 if( ! ( N & 1 ) )30 {31 int lim = N / 2 - 1;32 for( long long i = 1; i <= lim; ++i )33 {34 ans += ( N - 1 ) * mix( N - 1, i );35 }36 ans += ( N - 1 );37 }38 else39 {40 int lim = ( N - 1 ) / 2;41 for( long long i = 1; i < lim; ++i )42 {43 ans += ( N - 1 ) * mix( N - 1, i );44 } 45 ans += ( N - 1 ) / 2 * mix( N - 1, ( N - 1 ) / 2 ); 46 ans += ( N - 1 ); 47 }48 printf( "%I64d\n", ans );49 }50 return 0;51 }
突然想到用移位判定奇偶来统计1的个数,现在就去试试看。
上面的这种方法也能过,代码量下来了,但是速度慢了 78MS, 前面的是0MS。代码如下:
1 #include <cstring> 2 #include <cstdlib> 3 #include <cstdio> 4 using namespace std; 5 6 int main() 7 { 8 int T; 9 scanf( "%d", &T );10 while( T-- )11 {12 int N, beg = 1, end = 1, ans = 0;13 scanf( "%d", &N );14 for( int i = 1; i < N; ++i )15 beg <<= 1, end <<= 1;16 end <<= 1, end -= 1;17 for( int i = beg; i <= end; ++i )18 {19 int t = i;20 while( t > 0 )21 {22 if( t & 1 )23 ++ans;24 t >>= 1;25 }26 }27 printf( "%d\n", ans );28 }29 return 0;30 }
还有一种递推解法,个人觉得很好很强大。 代码如下:
1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 using namespace std; 5 6 int ans[22], base = 1; 7 8 int main() 9 {10 ans[1] = 1;11 for( int i = 2; i <= 20; ++i )12 {13 ans[i] = 2 * ans[i-1] + base;14 base <<= 1;15 }16 int T;17 scanf( "%d", &T );18 while( T-- )19 {20 int N;21 scanf( "%d", &N );22 printf( "%d\n", ans[N] );23 }24 return 0;25 }
转载于:https://www.cnblogs.com/Lyush/archive/2011/08/28/2156753.html
HDU-2502 月之数 组合数相关推荐
- HDU 2502 月之数(简单递推)
月之数 Problem Description 当寒月还在读大一的时候,他在一本武林秘籍中(据后来考证,估计是计算机基础,狂汗-ing),发现了神奇的二进制数. 如果一个正整数m表示成二进制,它的位数 ...
- HDOJ(HDU) 2502 月之数(进制)
Problem Description 当寒月还在读大一的时候,他在一本武林秘籍中(据后来考证,估计是计算机基础,狂汗-ing),发现了神奇的二进制数. 如果一个正整数m表示成二进制,它的位数为n(不 ...
- HDU2502 月之数(解法三)【废除!!!】
本文废除,参见以下链接. 参考链接:HDU2502 月之数[递推] 月之数 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/ ...
- HDU2502 月之数(解法二)【废除!!!】
本文废除,参见以下链接. 参考链接:HDU2502 月之数[递推] 月之数 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/ ...
- HDU2502 月之数【递推】
月之数 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- Virtual Judge——C - 月之数
题目介绍 当寒月还在读大一的时候,他在一本武林秘籍中(据后来考证,估计是计算机基础,狂汗-ing),发现了神奇的二进制数. 如果一个正整数m表示成二进制,它的位数为n(不包含前导0),寒月称它为一个n ...
- C/C++ 天之痕,月之数
题目描述 当陈竟仇还在读大一的时候,他在一本武林秘籍中,发现了神奇的二进制数. 如果一个正整数m表示成二进制,它的位数为n(不包含前导0),陈竟仇称它为一个n二进制数.所有的n位二进制数中,1的总个数 ...
- HDU 6114 Chess 【组合数】(2017百度之星程序设计大赛 - 初赛(B))
Chess Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- hdu 2063+hdu 1083(最大匹配数)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 二分匹配水题,求最大匹配数(即求边数最多的匹配),匈牙利算法实现.. View Code 1 # ...
最新文章
- SAP_SD常用增强
- iOS 导航栏遮挡视图
- [转]数据库性能优化(老Key)
- 机器学习入门书籍导读-高等数学上
- ITK:在不复制数据的情况下,从图像创建样本列表。
- java数据结构-Vector
- 测试反模式冰激凌模式的不足_单元测试反模式,完整列表
- JS学习之表格的排序
- 附加属性来控制控件中,要扩展模块的visibility
- 如何解除国外听QQ音乐网易音乐地区版权限制解除
- 关于VC6和VC9的区别
- Photoshop:PS如何实现放大图片不模糊
- 什么是一条好链?——一定要有自主创新的硬核技术
- 《阿米巴经营》第一章读后感1200字
- 运算放大器节点电压方程_区分运算放大器和电压比较器
- win10下Linux双系统
- 2017-2018 Petrozavodsk Winter Training Camp, Saratov SU Contest C.Cover the Paths 贪心+DFS
- EOJ 3322 万年历(历史题)
- Go设置一个工作区打开多个项目
- 论文阅读笔记:On the Role of Correlation and Abstraction in Cross-Modal Multimedia Retrieval
热门文章
- “画大饼”行走江湖的必备技能
- 你习惯用微信支付还是支付宝?
- The developer claims that Bpytop
- In the interview, Clem revealed that his first
- c语言程序设计小学生测验,c语言程序设计(1) 小学生计算机辅助教学系统
- access子窗体的控件vba怎么写_第37讲:VBA代码中运行错误的处理方式
- 使用PowerShell和T-SQL在多服务器环境中规划SQL Server备份和还原策略
- 使用SQL Server进行时间点恢复
- iPhone X 弹出输入框隐藏后页面上移不回位问题的解决办法
- PHP面向对象构造函数,析构函数