国家队论文首题 浅谈数位类统计问题 ural 1057
2013-04-25 12:13
176 查看
看《浅谈数位类统计问题》论文写的,感觉分析还是相当的到位啊。
一个数分解成进制数相加,该位置上的数绝对为1.
代码:
View Code
一个数分解成进制数相加,该位置上的数绝对为1.
代码:
View Code
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> using std::min; using std::swap; int const N = 40; int f ,num ,top,x,y,b,k,s,tot; void pre() { f[0][0]=1; for(int i=1;i<=31;i++) { f[i][0]=f[i-1][0]; for(int j=1;j<=i;j++) f[i][j]=f[i-1][j]+f[i-1][j-1]; } } int getsum(int x,int b) { tot=s=top=0; while(x) { num[top++]=x%b; x/=b; } for(int i=top-1;i>=0;i--) { if(!s&&num[i]>0)s=i; if(num[i]>1) { while(i>=0)x^=(1<<i),i--; break; } if(num[i]==1) { x^=(1<<i); } } int ret=0; s++; s=min(31,s); for(;s>0;s--) { if(x&(1<<s)) { tot++; if(tot>k)break; x^=(1<<s); } if((1<<(s-1))<=x) { ret+=f[s-1][k-tot]; } } if(tot+x==k)ret++; return ret; } int main() { pre(); while(~scanf("%d %d %d %d",&x,&y,&k,&b)) { if(x>y)swap(x,y); printf("%d\n",getsum(y,b)-getsum(x-1,b)); } return 0; }
相关文章推荐
- 国家队论文第二题 浅谈数位类统计问题 spoj 1182
- 数位类统计问题ural 1057
- 数位统计 sgu 390 <浅谈数位类问题>
- ural 1057 Amount of Degrees(数位统计)
- ural1057 Amount of Degrees 【数位dp】论文例题
- URAL 1057 Amount of Degrees (数位统计)
- 大雾课论文《浅谈简单使用计算机与算法快速解决物理问题》
- Ural 1057(Amount of Degrees-数位统计入门)
- URAL 1057 Amount of Degrees(数位统计)
- POJ 3162 浅谈尺取法区间问题运用及多源树上路径统计
- ural1057 Amount of Degrees数位统计入门题
- [ACM] ural 1057 Amount of degrees (数位统计)
- ural 1057 - Amount of Degrees(数位统计)
- [ACM] ural 1057 Amount of degrees (数位统计)
- 数位类统计问题--数位DP
- UOJ 261 [NOIP2016 DAY1 T2] 浅谈树上路径统计问题桶解法
- Linux下内存统计和内存泄露类问题的定位方法
- GAT项目新需求:保险管理增加查询统计-传日期参数问题
- 浅谈jquery中使用canvas的问题
- 统计学习浅谈