poj4474 Scout YYF I(概率dp+矩阵快速幂)

2013-10-07 19:24 69人阅读 评论(0) 收藏 举报
Scout YYF I
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 4100   Accepted: 1051

Description

YYF is a couragous scout. Now he is on a dangerous mission which is to penetrate into the enemy's base. After overcoming a series difficulties, YYF is now at the start of enemy's famous "mine road". This is a very long road, on which there are numbers of mines. At first, YYF is at step one. For each step after that, YYF will walk one step with a probability of p, or jump two step with a probality of 1-p. Here is the task, given the place of each mine, please calculate the probality that YYF can go through the "mine road" safely.

Input

The input contains many test cases ended with EOF.
Each test case contains two lines.
The First line of each test case is N (1 ≤ N ≤ 10) and p (0.25 ≤ p ≤ 0.75) seperated by a single blank, standing for the number of mines and the probability to walk one step.
The Second line of each test case is N integer standing for the place of N mines. Each integer is in the range of [1, 100000000].

Output

For each test case, output the probabilty in a single line with the precision to 7 digits after the decimal point.

Sample Input

1 0.5
2
2 0.5
2 4

Sample Output

0.5000000
0.2500000

Source

POJ Monthly Contest - 2009.08.23, Simon
第一次接触矩阵快速幂,矩阵要专门看,快速幂单独看看

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

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

[cpp] view plaincopyprint?
  1. #include <iostream>
  2. #include<stdio.h>
  3. #include<string.h>
  4. #include<math.h>
  5. #include<algorithm>
  6. using namespace std;
  7. int s[20];
  8. double q,p;
  9. struct node
  10. {
  11. double dp[2][2];//矩阵
  12. };
  13. node mult(node a,node b)//矩阵乘法
  14. {
  15. int i,j,n,k;
  16. node temp;
  17. for(i=0;i<2;i++)
  18. {
  19. for(j=0;j<2;j++)
  20. {
  21. temp.dp[i][j]=0;
  22. for(k=0;k<2;k++)
  23. temp.dp[i][j]+=a.dp[i][k]*b.dp[k][j];
  24. }
  25. }
  26. return temp;
  27. }
  28. node cal(int N)//快速幂
  29. {
  30. node a,res;
  31. a.dp[0][0]=p;
  32. a.dp[0][1]=q;
  33. a.dp[1][0]=1;
  34. a.dp[1][1]=0;
  35. res.dp[0][0]=1;
  36. res.dp[0][1]=0;
  37. res.dp[1][0]=0;
  38. res.dp[1][1]=1;
  39. while(N)
  40. {
  41. if(N&1)
  42. {
  43. res=mult(res,a);
  44. }
  45. a=mult(a,a);
  46. N>>=1;
  47. }
  48. return res;
  49. }
  50. int main()
  51. {
  52. int i,j,n,m,max,flag;
  53. double tempqn;
  54. node temp,a;
  55. while(scanf("%d%lf",&n,&p)!=EOF)
  56. {
  57. q=1-p;
  58. s[0]=0;
  59. for(i=1;i<=n;i++)
  60. {
  61. cin>>s[i];
  62. }
  63. sort(s+1,s+1+n);
  64. for(i=1,flag=1;i<n;i++)
  65. {
  66. if(s[i]+1==s[i+1])
  67. flag=0;
  68. }
  69. if(!flag||s[1]==1)
  70. {
  71. puts("0.0000000");
  72. <span style="white-space:pre">      </span>continue;
  73. }
  74. a.dp[0][0]=1;
  75. a.dp[0][1]=0;
  76. a.dp[1][0]=0;
  77. a.dp[1][1]=0;
  78. for(i=1;i<=n;i++)
  79. {
  80. temp=cal(s[i]-s[i-1]-2);
  81. a=mult(temp,a);
  82. a.dp[0][0]=a.dp[0][0]*q;
  83. a.dp[0][1]=0;
  84. a.dp[1][0]=0;
  85. a.dp[1][1]=0;
  86. }
  87. printf("%.7f\n",a.dp[0][0]);
  88. }
  89. return 0;
  90. }

poj4474 Scout YYF I(概率dp+矩阵快速幂)相关推荐

  1. POJ 3744:Scout YYF I 概率DP+特征方程+快速幂

    Scout YYF I 题目链接: http://poj.org/problem?id=3744 题意: 有个人要到一个叫"mine road"的地方,路线是一条直线,起点在1,路 ...

  2. Codeforces 621E Wet Shark and Block【dp + 矩阵快速幂】

    题意: 有b个blocks,每个blocks都有n个相同的0~9的数字,如果从第一个block选1,从第二个block选2,那么就构成12,问对于给定的n,b有多少种构成方案使最后模x的余数为k. 分 ...

  3. 第九届河南省赛 宣传墙 //状压dp+矩阵快速幂+dfs

    http://nyoj.top/problem/1273 状压dp+矩阵快速幂+dfs 1273-宣传墙 内存限制:64MB 时间限制:1000ms 特判: No 通过数:19 提交数:64 难度:4 ...

  4. 【BZOJ】4861: [Beijing2017]魔法咒语 AC自动机+DP+矩阵快速幂

    [题意]给定n个原串和m个禁忌串,要求用原串集合能拼出的不含禁忌串且长度为L的串的数量.(60%)n,m<=50,L<=100.(40%)原串长度为1或2,L<=10^18. [算法 ...

  5. CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)E.飞行棋(期望dp+矩阵快速幂)

    题目 飞行棋的规则如下: 1.每名玩家有一个棋子,每个回合可以掷一次骰子. 2.如果使用的骰子为 k面,则这 k面上的点数分别为 1,2,3,-,k,且掷得每种点数的概率均为​. 3.如果当前回合掷得 ...

  6. BZOJ 2004 公交线路(状压DP+矩阵快速幂)

    注意到每个路线相邻车站的距离不超过K,也就是说我们可以对连续K个车站的状态进行状压. 然后状压DP一下,用矩阵快速幂加速运算即可. #include <stdio.h> #include ...

  7. 2018.09.28 hdu5434 Peace small elephant(状压dp+矩阵快速幂)

    传送门 看到n的范围的时候吓了一跳,然后发现可以矩阵快速幂优化. 我们用类似于状压dp的方法构造(1(1(1<<m)∗(1m)*(1m)∗(1<<m)m)m)大小的矩阵. 然后 ...

  8. bzoj 3329: Xorequ(DP+矩阵快速幂)

    3329: Xorequ Time Limit: 1 Sec  Memory Limit: 256 MB Submit: 1134  Solved: 491 [Submit][Status][Disc ...

  9. bzoj 4818: [Sdoi2017]序列计数(DP+矩阵快速幂)

    4818: [Sdoi2017]序列计数 Time Limit: 30 Sec  Memory Limit: 128 MB Submit: 769  Solved: 463 [Submit][Stat ...

  10. 骨牌问题(DP+矩阵快速幂)

    在2*N的一个长方形方格中,用一个1*2的骨牌排满方格. 问有多少种不同的排列方法. 例如:2 * 3的方格,共有3种不同的排法.(由于方案的数量巨大,只输出 Mod 10^9 + 7 的结果) In ...

最新文章

  1. 深入了解Mvc路由系统
  2. 【线上分享】视频质量评价:挑战与机遇
  3. linux s t i a权限,关于Linux下s、t、i、a权限
  4. php mysql删除失败_php+MySQL实战案例【七】数据编辑、删除
  5. 啊哈c语言答案1.3,啊哈C语言编程-第2课-让计算机开口说话
  6. Bert遇到文本分类:如何用好Bert这把刀
  7. 华为最新解bl解锁码计算工具_黔隆科技刷机教程红米note4X低配版忘记密码刷机解锁降级救砖解屏幕锁账户锁教程...
  8. PPT中导出高分辨率图片的方法
  9. 传感器技术-电阻式传感器(学习笔记二)
  10. Android源码编译:openjdk安装
  11. putty使用SSH密钥登录Linux实例
  12. 喜欢的歌——隐形的翅膀(张韶涵)
  13. linux中rcf命名管道,RCF-进程间为C通讯
  14. sqlServer取余数
  15. 【Android】APP嵌入百度地图骑行导航一直初始化引擎失败解决办法
  16. python提取图片文字视频教学_Python学习第七天之爬虫的学习与使用(爬取文字、图片、 视频)...
  17. 关于pycharm中html在页面访问的记录(授权问题)
  18. word打带圈符号(带圈对勾为例)
  19. DICOM:基于fo-dicom的简易DICOM Viewer
  20. 【tio-websocket】4、tio-websocket-server实现自定义集群模式

热门文章

  1. JS使用递归遍历json对象进行操作
  2. mysql数据库双机备份_配置MySQL数据库双机热备份(转)
  3. Spring AOP实现原理
  4. 数据结构与算法——线性表的链式储存结构
  5. matlab产生大气湍流,一种大气湍流模拟装置的制造方法
  6. 【游戏策划】Excel的使用技巧(一)
  7. Python:猜拳游戏项目(excel形式保存信息)
  8. 蔡学镛告诉我们—做好技术PPT的要点
  9. 优化设计-混合惩罚函数法-MATLAB编程
  10. DLL入口函数DllMain