poj 3744 Scout YYF I(递推求期望)

题链

题意:给出n个坑,一个人可能以p的概率一步一步地走,或者以1-p的概率跳过前面一步,问这个人安全通过的概率

解法:

递推式:

对于每个坑,我们可以这么定义一个数组: d[i]代表它安全落在位置i的概率,在这个1到max(a[i])的范围中,只有那些坑是不安全的,答案只需求出所有不掉入坑的概率的连乘即可

矩阵:

由于数字范围巨大,需要对递推式进行矩阵连乘加速

| p 1-p |    | d[i]   |   | d[i+1] |
| 1 0 | * | d[i-1] | =| d[i] |
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
typedef double ll;
const int MOD=1e9+7;
int tn;
struct Matrix
{
double m[111][111];
Matrix()
{
memset(m,0,sizeof(m));
}
friend Matrix operator*(Matrix a,Matrix b)
{
Matrix res;
double x;
for(int i=0; i<tn; i++)
{
for(int j=0; j<tn; j++)
{
x=0;
for(int k=0; k<tn; k++)
{
x=(x+(ll)a.m[i][k]*b.m[k][j]);
}
res.m[i][j]=x;
}
}
return res;
}
friend Matrix operator+(Matrix a,Matrix b)
{
Matrix res;
ll x;
for(int i=0; i<tn; i++)
{
for(int j=0; j<tn; j++)
{
res.m[i][j]=(a.m[i][j]+b.m[i][j]);
}
}
return res;
}
friend Matrix operator^(Matrix a,int b)
{
Matrix ans;
for(int i=0;i<tn;i++) ans.m[i][i]=1;
for(int i=b; i; i>>=1,a=a*a)
if(i&1)ans=ans*a;
return ans;
}
} T,F;
int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
void init(double p){
for(int i=0;i<tn;i++) F.m[i][i]=1;
T.m[0][0]=p;T.m[0][1]=1-p;
T.m[1][0]=1;
}
int main()
{
tn=2;
int n,a[20]={0};
double p;
while(cin>>n>>p){
init(p);
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+1+n);
double ans=1;
if(a[1]==1){
printf("%.7lf\n",0);
continue;
}
Matrix tmp;
for(int i=1;i<=n;i++){
if(a[i]==a[i-1]){
continue;
}
if(a[i]-a[i-1]>2){
tmp=T^(a[i]-a[i-1]-2);
ans*=(tmp.m[0][0])*(1-p); //算出a[i]-1的概率,然后跳过a[i]的概率
}else{
tmp=T^(a[i]-a[i-1]-1);
ans*=1-(tmp.m[0][0]); //反向求出不落入a[i]的概率
}
}
printf("%.7lf\n",ans);
}
return 0;
}

最新文章

  1. 【java】jackson 中JsonFormat date类型字段的使用
  2. ArrayList/Vector的原理、线程安全和迭代Fail-Fast
  3. 在android中如何通过点击edittext之外的部分使软键盘隐藏
  4. 关于版本号:alpha、beta、rc、stable
  5. 深入浅出 iOS 之生命周期
  6. cf 323A A. Black-and-White Cube 立体构造 不知道为什么当k为奇数时构造不出来 挺有趣的题目吧
  7. js获取屏幕和窗口的信息
  8. 团队作业4--第一次项目冲刺(Alpha版本)7
  9. springboot(十六):使用Jenkins部署Spring Boot
  10. maven 打包Could not resolve dependencies for project和无效的目标发行版: 1.8
  11. flask-日料网站搭建
  12. bzoj:1230: [Usaco2008 Nov]lites 开关灯
  13. B树和B+树的插入、删除图文详解(good)
  14. python_requests官方文档中文版
  15. ZT Linux可用的最新版本的sublime text注册
  16. SpringBoot 部署到linux环境
  17. python程序打包成.exe
  18. BZOJ 1150 - 数据备份Backup - [小顶堆][CTSC2007]
  19. dubbo的三种运行方式
  20. Gradle入门(3):构建第一个Java项目

热门文章

  1. obs nginx-rtmp-module搭建流媒体服务器实现直播 ding
  2. bzoj 4809: 皇后【dfs】
  3. 使用 typescript 和 canvas 重构snow效果
  4. sql server 触发器详细应用
  5. E - A^B mod C (大数乘方取模)
  6. 牛客练习赛17-A-长方体
  7. JavaScript 把函数作为参数进行传值
  8. 373 Find K Pairs with Smallest Sums 查找和最小的K对数字
  9. [译]libcurl错误码
  10. 上传txt文件编码格式判断(文本乱码解决方法)