POJ3744 Scout YYF I 概率DP+矩阵快速幂
http://poj.org/problem?id=3744
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
//using namespace std;
const int maxn=;
const double eps=1e-;
const int modn=;
int n;double p,ans;
int b[]={};
double c[]={};
struct mat{
double e[][];
mat(){memset(e,,sizeof(e));}
};mat a;
void yu(){
memset(b,,sizeof(b));
a.e[][]=1.0;
a.e[][]=1.0-p;
a.e[][]=p;
ans=;
}
mat Mul(mat x,mat y){
mat z;
for(int i=;i<=;i++){
for(int j=;j<=;j++){
for(int k=;k<=;k++){
z.e[i][j]+=x.e[i][k]*y.e[k][j];
}
}
}
return z;
}
mat Pow(mat x,int k){
mat z;
z.e[][]=;z.e[][]=;
while(k){
if(k&){
z=Mul(x,z);
}
k/=;
x=Mul(x,x);
}
return z;
}
int main(){
while(~scanf("%d%lf",&n,&p)){
yu();
for(int i=;i<=n;i++){
scanf("%d",&b[i]);
}
std::sort(b+,b++n);
b[]=;
int f=;
for(int i=;i<=n;i++){
if(b[i]==b[i-]+){
printf("%.7f\n",0.0);
f=;
break;
}
}if(f) continue;
c[]=1.0,c[]=p;
for(int i=;i<=n;i++){
if(b[i]-b[i-]==);
else if(b[i]-b[i-]==){
ans*=p;
}else{
mat z=Pow(a,b[i]-b[i-]-);
ans*=c[]*z.e[][]+c[]*z.e[][];
}
ans*=(1.0-p);
}
printf("%.7f\n",ans+eps);
}
return ;
}
POJ3744 Scout YYF I 概率DP+矩阵快速幂的更多相关文章
- POJ 3744 Scout YYF I 概率dp+矩阵快速幂
题目链接: http://poj.org/problem?id=3744 Scout YYF I Time Limit: 1000MSMemory Limit: 65536K 问题描述 YYF is ...
- poj 3744 Scout YYF 1 (概率DP+矩阵快速幂)
F - Scout YYF I Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Sub ...
- poj3744 Scout YYF I[概率dp+矩阵优化]
Scout YYF I Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8598 Accepted: 2521 Descr ...
- poj4474 Scout YYF I(概率dp+矩阵快速幂)
Scout YYF I Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4100 Accepted: 1051 Descr ...
- Scout YYF I POJ - 3744(概率dp + 矩阵快速幂)
题意: 一条路上有n个地雷,你从1开始走,单位时间内有p的概率走一步,1-p的概率走两步,问安全通过这条路的概率 解析: 很容易想到 dp[i] = p * dp[i-1] + (1 - p) * d ...
- poj3744 (概率DP+矩阵快速幂)
http://poj.org/problem?id=3744 题意:在一条铺满地雷的路上,你现在的起点在1处.在N个点处布有地雷,1<=N<=10.地雷点的坐标范围:[1,10000000 ...
- POJ-3744 Scout YYF I 概率DP
题目链接:http://poj.org/problem?id=3744 简单的概率DP,分段处理,遇到mine特殊处理.f[i]=f[i-1]*p+f[i-2]*(1-p),i!=w+1,w为mine ...
- POJ 3744 Scout YYF I (概率dp+矩阵快速幂)
题意: 一条路上,给出n地雷的位置,人起始位置在1,向前走一步的概率p,走两步的概率1-p,踩到地雷就死了,求安全通过这条路的概率. 分析: 如果不考虑地雷的情况,dp[i],表示到达i位置的概率,d ...
- poj 3744 概率dp+矩阵快速幂
题意:在一条布满地雷的路上,你现在的起点在1处.在N个点处布有地雷,1<=N<=10.地雷点的坐标范围:[1,100000000]. 每次前进p的概率前进一步,1-p的概率前进1-p步.问 ...
随机推荐
- frameset测试
frame不能放在body标签内.指定name属性,为这一个框架指定名字,在html的a的target属性可以设为target="right"在该框架显示跳转的页面.(常用于后台管 ...
- tp5 r3 一个简单的SQL语句调试实例
tp5 r3 一个简单的SQL语句调试实例先看效果核心代码 public function index() { if (IS_AJAX && session("uid&quo ...
- scandir函数的研究【笔记】
以下是本人的学习笔记,代码并非原创,均摘自官方源码,贴出来仅供学习记录用 scandir 的使用要注意内存泄漏的问题 scandir函数实现: vi ./uClibc-0.9.33.2/libc/mi ...
- caffe Python API 之Model训练
# 训练设置 # 使用GPU caffe.set_device(gpu_id) # 若不设置,默认为0 caffe.set_mode_gpu() # 使用CPU caffe.set_mode_cpu( ...
- VC RichEdit中英文关键字标红
最近需要做vc的RichEdit控件里的内容关键字标红,由于RichEdit的内容可能是中英文混合的,所以需要先转成Unicode,再用wcsstr函数找到关键字出现的位置,再用SetSel.SelS ...
- 程序调试命令gdb
锁定线程 set scheduler-locking 1.要使用此命令,先用gcc -g编译程序,如: $gcc -g test.c -o test 编译test.c源程序,输入此程序的调试版本t ...
- python模块之cx_Oracle
安装cx_Oracle wget http://download.oracle.com/otn/linux/instantclient/122010/instantclient-basic-linux ...
- Windows: 如何配置IPv6隧道
清空隧道配置: netsh interface ipv6 set teredo disable netsh interface ipv6 6to4 set state disable netsh in ...
- php返回json数据函数实例_php技巧_脚本之家
本文实例讲述了php返回json数据函数的用法,分享给大家供大家参考.具体方法如下: json_encode()函数用法: echo json_encode(array('a'=>'bbbb', ...
- day5冒泡排序
冒泡排序:是一种基础的算法,实现数据的排序,排序的原则是前一个与后一个进行比较,如果前面的值大则交换,否则不交换,多次循环每次把最大的数据循环至后面就能够完成所需. 上面的图是冒泡排序的原理,每次循环 ...