ZOJ-3162-To Go or Not to Go
2015-11-13 20:27
525 查看
点击打开题目链接
<span style="font-size:18px;"># include <cstdio> # include <cstring> # include <iostream> using namespace std; double dp[30][2]; void init() { memset(dp,0,sizeof(dp)); for(int i = 1;i < 30;i++){ dp[i][1] = dp[i-1][1] + dp[i-1][0] + (1<<i-1); dp[i][0] = dp[i-1][1] + dp[i-1][0]; } } double fun(int n) { int cnt = 0;double sum = 0; for(int i = 29;i >= 0;i--){ if(n &(1<<i)){ sum += dp[i+1][0]; sum += (double)(1<<i) * cnt; cnt++; } } return sum + cnt; } double calc(int a,int b){ int bit1,bit2; double cnt=b-a+1,sum=0; for(int i=29;i>=0;i--){ if(a&(1<<i)){ bit1=i; break; } } for(int i=29;i>=0;i--){ if(b&(1<<i)){ bit2=i; break; } } if(bit2-bit1==0){ double num=fun(b)-fun(a-1); sum = num/(bit1+1); } else{ int x = (1<<(bit1+1)) - 1; double num=fun(x) - fun(a-1); sum = num/(bit1+1); x = (1<<bit2); num = fun(b)-fun(x) + 1; sum += num/(bit2+1); } for(int i=bit1+2;i<=bit2;i++) sum+=dp[i][1]/i; return sum/cnt; } int main(){ int t; init(); scanf("%d",&t); while(t--){ int a,b; scanf("%d%d",&a,&b); printf("%.6lf\n",calc(a,b)); } return 0; }</span>
相关文章推荐
- 【bzoj4064】[Cerc2012]The Dragon and the knights
- Golang Log 学习笔记
- goahead移植
- go语言字符串处理
- 别致的语言GO(GO语言初涉)
- go语言基础
- google搜索
- django migrations
- 使用cargo自动化部署maven项目
- goahead Web Server 环境搭建
- LeetCode Longest Palindromic Substring Part Manacher ALGORITHM
- Go 语言项目管理
- HDOJ 3635 Dragon Balls(并查集)
- 【POJ 2195】 Going Home(最小费)
- 浅谈DragonBoard 410c的Miracast无线同屏技术
- Mac系统Google登陆问题解决
- Go中nil
- django安全
- mongo的复制集
- Go语言反射规则 - The Laws of Reflection