POJ 3252 Round Numbers(组合数学)
来源:互联网 发布:淘宝贷款是真的吗 编辑:程序博客网 时间:2024/04/30 01:19
题目链接:http://poj.org/problem?id=3252
这个题目比较容易想,但是写代码要注意的细节异常多,整体思想是组合数学
求两个数到1有多少Round Numbers,然后相减
求的时候分两种情况:
1.位数相等的小于而且符合条件的(二进制位数)
先化为二进制
先从左向右(第二位开始)依次将1变成0,这样肯定比原来数小,后面多少位随机,利用前面已知0和1的个数计算后面的组合
2.位数小的第一位肯定是1,后面处理方法直接排列组合
C[i][j]先预处理下!
#include <string.h>#include <stdio.h>#include <algorithm>#include <iostream>using namespace std;const int maxn = 50;int C[maxn][maxn];int bit[maxn];int num;int a,b;int init(){ memset(C,0,sizeof(C)); int i,j,k; C[1][0]=C[1][1]=C[0][0]=1; for(i=0;i<=50;i++) C[i][0]=C[i][i]=1; for(i=2;i<=50;i++) for(j=1;j<=50;j++){ C[i][j]=C[i-1][j-1]+C[i-1][j]; } return 0;}int cal_num(int a){ num=0; while(a!=0){ if(a&1) bit[num++]=1; else bit[num++]=0; a>>=1; } return 0;}int same(int num){ int ans=0,zero=0,one=1,now=num-2,then; num--,num--; while(num>=0){ if(bit[num]){ zero++; for(then=0;then<=now;then++){ if(zero+then >= now-then+one) ans+=C[now][then]; } zero--; one++; }else{ zero++; } num--; now--; } if(zero >= one) ans++; return ans;}int cal_ans(int value){ int ans=0,zero=0,one=1,now,then,i; cal_num(value); ans+=same(num); num--; while(num>=1){ now=num-1; for(then=now;then>=(num+1)/2;then--){ ans+=C[now][then]; } num--; } return ans;}int main(){ int i,j,k; init(); while(scanf("%d%d",&a,&b)!=EOF){ if(a>b) swap(a,b); printf("%d\n",cal_ans(b)-cal_ans(a-1)); } return 0;}
0 0
- POJ 3252 Round Numbers(组合数学)
- poj 3252 Round Numbers (组合数学)
- POJ 3252 Round Numbers(组合数学)
- POJ 3252 Round Numbers (组合数学)
- poj 3252 Round Numbers 组合数学
- poj 3252 Round Numbers 组合数学
- POJ 3252 Round Numbers 组合数学
- [poj 3252] Round Numbers 组合数学
- poj 3252Round Numbers(组合数学)
- POJ Round Numbers 3252 (组合数学)
- POJ 3252 Round Numbers 组合数学
- 组合数学 POJ 3252 Round Numbers
- POJ 3552Round Numbers(组合数学)
- POJ 题目3252 Round Numbers(组合数学)
- POJ-Round Numbers-组合数学
- poj 3252 Round Numbers 数位DP or 组合数学
- POJ-3252-Round Numbers-组合数学-递推
- POJ 3252 Round Numbers (组合数学/数位dp)
- Drawable资源--属性动画Property Animation资源
- java 资料收藏
- 隐私问题警告:此文档中包含宏
- 奇热网改名面包网
- linux 终端分屏命令vsp
- POJ 3252 Round Numbers(组合数学)
- 一个工科研究生毕业后的职业规划
- ios7 毛玻璃效果
- 再回首2013
- xcode生成的IOS安装文件的位置
- Linux阵列 RAID详解
- 程序员,时间都上哪儿了
- Palindrome Number
- A Joke