题目大意:

输入n,代表一位童子兵要穿过一条路,路上有些地方放着n个地雷(1<=n<=10)。再输入p,代表这位童子兵非常好玩,走路一蹦一跳的。每次他在 i 位置有 p 的概率走一步到 i+1 ,或者 (1-p) 的概率跳一步到 i+2。输入n个数,代表n个地雷的位置(1<=n<=100000000),童子兵初始在1位置,求他安全通过这条道路的概率。

基本思路:

如果k 号位有雷,那么安全通过这个雷只可能是在 k-1 号位选择走两步到 k+1 号位。因此,可以得到如下结论:在第 i 个雷的被处理掉的概率就是从 a[i-1]+1 号位到 a[i] 号位的概率。于是,可以用 1 减去就可以求出安全通过第 i个雷的概率,最后乘起来即可,比较悲剧的是数据很大,所以需要用到矩阵快速幂……

类似斐波那契数列,有ans[i]=p*ans[i-1]+(1-p)*ans[i-2] ,构造矩阵为

代码如下:

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4.  
  5. using namespace std;
  6.  
  7. typedef long long ll;
  8. const int inf = 0x3f3f3f3f;
  9. const int maxn = 100000+10;
  10. double f[3][3],base[3][3],tmp[3][3];
  11. double b[3],c[3];
  12. int n,pos[20];
  13. double p;
  14. double solve(int t){
  15.  
  16. base[0][0]=p;
  17. base[0][1]=1.0-p;
  18. base[1][0]=1;
  19. base[1][1]=0;
  20. f[0][0]=1;
  21. f[0][1]=0;
  22. f[1][0]=0;
  23. f[1][1]=1;
  24. b[0]=1;
  25. b[1]=0;
  26. while(t){
  27. if(t&1){
  28. for(int i=0;i<2;i++){
  29. for(int j=0;j<2;j++){
  30. tmp[i][j]=0;
  31. for(int k=0;k<2;k++){
  32. tmp[i][j]+=f[i][k]*base[k][j];
  33. }
  34. }
  35. }
  36. for(int i=0;i<2;i++){
  37. for(int j=0;j<2;j++){
  38. f[i][j]=tmp[i][j];
  39. }
  40. }
  41. }
  42. for(int i=0;i<2;i++){
  43. for(int j=0;j<2;j++){
  44. tmp[i][j]=0;
  45. for(int k=0;k<2;k++){
  46. tmp[i][j]+=base[i][k]*base[k][j];
  47. }
  48. }
  49. }
  50. for(int i=0;i<2;i++){
  51. for(int j=0;j<2;j++){
  52. base[i][j]=tmp[i][j];
  53. }
  54. }
  55. t>>=1;
  56. }
  57. for(int i=0;i<2;i++){
  58. c[i]=0;
  59. for(int j=0;j<2;j++){
  60. c[i]+=f[i][j]*b[j];
  61. }
  62. }
  63. return c[0];
  64. }
  65. int main(){
  66. while(~scanf("%d%lf",&n,&p)){
  67. for(int i=1;i<=n;i++){
  68. scanf("%d",&pos[i]);
  69. }
  70. pos[0]=0;
  71. sort(pos,pos+n+1);
  72. double ans=1.0;
  73. for(int i=1;i<=n;i++){
  74. ans=ans*(1.0-solve(pos[i]-pos[i-1]-1));
  75. }
  76. printf("%.7lf\n",ans);
  77. }
  78. return 0;
  79. }

  

poj 3744 矩阵快速幂+概率dp的更多相关文章

  1. 刷题总结—— Scout YYF I(poj3744 矩阵快速幂+概率dp)

    题目: Description YYF is a couragous scout. Now he is on a dangerous mission which is to penetrate int ...

  2. 矩阵快速幂+概率DP poj 3744

    题意:在一条不满地雷的路上,你现在的起点在1处.在N个点处布有地雷,1<=N<=10.地雷点的坐标范围:[1,100000000]. 每次前进p的概率前进一步,1-p的概率前进1-p步.问 ...

  3. 2018.10.23 bzoj1297: [SCOI2009]迷路(矩阵快速幂优化dp)

    传送门 矩阵快速幂优化dp简单题. 考虑状态转移方程: f[time][u]=∑f[time−1][v]f[time][u]=\sum f[time-1][v]f[time][u]=∑f[time−1 ...

  4. POJ 3744 Scout YYF I 概率dp+矩阵快速幂

    题目链接: http://poj.org/problem?id=3744 Scout YYF I Time Limit: 1000MSMemory Limit: 65536K 问题描述 YYF is ...

  5. POJ 2778 DNA Sequence ( AC自动机、Trie图、矩阵快速幂、DP )

    题意 : 给出一些病毒串,问你由ATGC构成的长度为 n 且不包含这些病毒串的个数有多少个 分析 : 这题搞了我真特么久啊,首先你需要知道的前置技能包括 AC自动机.构建Trie图.矩阵快速幂,其中矩 ...

  6. BZOJ2553 Beijing2011禁忌(AC自动机+动态规划+矩阵快速幂+概率期望)

    考虑对一个串如何分割能取得最大值.那么这是一个经典的线段覆盖问题,显然每次取右端点尽量靠前的串.于是可以把串放在AC自动机上跑,找到一个合法串后就记录并跳到根. 然后考虑dp.设f[i][j]表示前i ...

  7. 【矩阵快速幂优化DP】【校内测试】

    实际上是水水题叻,先把朴素DP方程写出来,发现$dp[i]$实际上是$dp[i-k]-dp[i-1]$的和,而看数据范围,我们实际上是要快速地求得这段的和,突然就意识到是矩阵快速幂叻. 构建矩阵什么的 ...

  8. LOJ2325. 「清华集训 2017」小 Y 和恐怖的奴隶主【矩阵快速幂优化DP】【倍增优化】

    LINK 思路 首先是考虑怎么设计dp的状态 发现奴隶主的顺序没有影响,只有生命和个数有影响,所以就可以把每个生命值的奴隶主有多少压缩成状态就可以了 然后发现无论是什么时候一个状态到另一个状态的转移都 ...

  9. HDU5411——CRB and Puzzle——————【矩阵快速幂优化dp】

    CRB and Puzzle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

随机推荐

  1. jQuery JCrop插件的使用详解

    jQuery的一个图片剪切的一个插件, 使用插件必须条件:引入jQuery.js文件,引入jQuery.Jcrop.js文件,引入JQuery.Jcrop.css文件   1.最基本的使用方法: &l ...

  2. win10 + VS2015 编译 ARPACK

    step 1: 下载ARPACK , mingw-w64-install 和 mingw-get-inst-20120426.exe: step 2: 安装 MinGW-64默认安装路径即可. ste ...

  3. hdu4857 拓扑排序

    题目大意: 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能排成一行. 现在有n个人,从1标号到n.同时有一些奇怪的约束条件,每个都形如:a必须在b之前. 同时,社会是不平等的,这些 ...

  4. 【软工项目Beta阶段】绝不划水队OUC-Market版本测试报告

    我们在开发APP的时候进行了软件的测试,同时发现了一些BUG,如下: bug 我的:与各种页面之间的交互不灵活 登录与注册:记住密码功能不完善 商场主界面:搜索功能还没有完善 收藏功能:与数据库的交互 ...

  5. SQL必知必会——插入数据(十五)

    1.数据插入 INSERT用来将行插入(或添加)到数据库表.插入有几种方式: 插入完整的行插入行的一些部分插入某些查询的结果注意:1.使用INSERT语句可能需要客户端/服务端DBMS中的特定安全权限 ...

  6. linux(centos6) 常用操作

    目录 一.开机关机 1.Linux centos重启命令: 2.Linux centos关机命令: 二.图形界面与命令界面的切换 1.修改/etc/inittab文件,文件中,最后一行id:5:ini ...

  7. python如何读写EXCEL文档 (有助于自动化的参数化,用的方法是XLRD,XLWT)

    读EXCEL: import xlrd 例1, data=xlrd.open("E:\egg.xls")     # 打开xls文件 table=data.sheets()[0] ...

  8. CentOS 7 & php7.2安装 php-redis 扩展

    CentOS 7 & php7.2安装 php-redis 扩展 1.下载phpredis-developcd /tmpwget https://codeload.github.com/php ...

  9. [STemWin教程入门篇]第二期:emWin5.xx的详细移植步骤

    转自:http://bbs.armfly.com/read.php?tid=1545 重要说明:(0)由于这个移植教程是去年过年的时候做的,用的是5.16,这就不再做个5.20的移植了,方法是一样的. ...

  10. Redis Cluster 设置密码

    两种方式 1.修改配置文件 在每个节点的配置文件里面增加密码选项,一定要加上 masterauth,不然 Redirected 的时候会失败. masterauth redispassword req ...