题目大意:
  给你一个数x,进行k次操作:
  1.有p%的概率将x翻倍;
  2.有1-p%的概率将x加1。
  问最后二进制下x末尾0个数的期望。

思路:
  动态规划。
  由于k只到200,所以每次修改只与最后8位有关。
  f[i][x][y][z]表示操作次数为i时,末尾8为表示的数字为x,第9位为y,第9位及以上和第9位数字连续相同的长度。
  对于两种情况分别转移,注意特判超过8位的进位。
  最后计算期望的时候,可以枚举第一维为k的所有状态,然后通过状态可以直接计算出末尾0的数量,乘上概率即可。

 #include<cstdio>
#include<cctype>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
const int K=;
double f[K][][][];//[処理回数][末尾8bit][9bit目の値][9bit目の値が上にいくつ連続するか]
int main() {
int x=getint(),k=getint();
double p=getint()/100.0;
//初始状态
int cnt=,tmp=x>>;
while(tmp&&((tmp&)==((x>>)&))) {
tmp>>=;
cnt++;
}
f[][x&][(x>>)&][cnt]=;
for(register int i=;i<k;i++) {
for(register int x=;x<=;x++) {
for(register int y=;y<;y++) {
for(register int z=;z<;z++) {
/*times 2*/
f[i+][(x<<)&][(x>>)&][(((x>>)&)^y)?:(z+)]+=f[i][x][y][z]*p;
/*plus 1*/
if(x==) {//特殊情况:考虑最后八位存不下而进位的情况
if(y) {//如果第九位是1,则相当于前面那么多1都变成0
f[i+][][][z]+=f[i][x][y][z]*(-p);
} else {//如果第九位是0,则相当于把这个0变成1
f[i+][][][]+=f[i][x][y][z]*(-p);//这里把9位以后的1算作多少都没关系,因为反正最后统计的是0
}
} else {
f[i+][x+][y][z]+=f[i][x][y][z]*(-p);
}
}
}
}
}
//计算期望
double ans=;
for(register int x=;x<=;x++) {
for(register int y=;y<;y++) {
for(register int z=;z<;z++) {
int cnt=,tmp=x;
while(cnt<&&!(tmp&)) {
cnt++;
tmp>>=;
}
if(!y&&cnt==) cnt+=z;
ans+=f[k][x][y][z]*cnt;
}
}
}
printf("%.13f\n",ans);
return ;
}

最新文章

  1. 参考bootstrap中的popover.js的css画消息弹框
  2. 如何配置Linux系统的网络IP地址
  3. 各廠商ERP系統架構圖連結 (ERP流程圖)(轉)
  4. 分割超大Redis数据库例子
  5. 团队小组开发nabc分析
  6. Lync边缘服务器配置
  7. 牵扯较多属性和方法的类题目,很简单的题目本来不想发的,如果有同学学到这个题目感觉太长不愿敲代码,copy走我的即可~不过还是建议自己打一打
  8. 4 weekend110的hdfs下载数据源码跟踪铺垫 + hdfs下载数据源码分析-getFileSystem(值得反复推敲和打断点源码)
  9. 手机号码抽奖系统(JS)
  10. Bootstrap-dialog的使用(续Bootstrap Table)
  11. 520. Detect Capital
  12. Python3 tkinter基础 Radiobutton 设置相同的value值,产生连锁效果
  13. CentOS7查看和关闭防火墙
  14. 通过Tag标签回退版本修复bug
  15. nginx实现限速
  16. Swift开发iOS项目实战视频教程(二)---图片与动画
  17. 超酷的 Vim 搜索技巧
  18. mac的framework的路径
  19. Linux实用指令
  20. Virtual PC局域网共享速度慢的解决半法。转

热门文章

  1. AUC画图与计算
  2. 2013-7-31hibernate二级缓存
  3. 贪心算法_01背包问题_Java实现
  4. Msql中的触发器
  5. mac 卸载 node并重新安装
  6. UBuntu14.04 --vim安装YouCompleteMe插件
  7. SVN的使用、分支合并及解决冲突详解
  8. mysql视图学习总结(转)
  9. setitimer()
  10. 这是我在word 2010上发布的第一篇文章