【POJ3744】Scout YYF I
Description
YYF是一个英勇的侦查员。现在他正在执行打入到敌方内部的危险任务。在解决了一系列的险情后,YYF到达了敌方著名的"地雷路"起始点。这条路非常长,上面被精心排布了不少地雷。一开始,YYF站在1的位置。对于后面的路程,YYF有p的概率向前走一步,或者有1−p的概率向前跳两步。现在问题来了。非常喜欢坑队友的情报部得到了每个地雷的位置,但他们不准备告诉YYF,反而请你计算YYF能安全走过整条“地雷路”的概率。
Input
输入有多组数据,并由EOF结束.
每组数据由两行组成。
第一行是地雷的数量N and p 被一个空格分割。
第二行有n个数字,指代每个地雷的位置。
Output
对于每组数据,输出一行,为安全走过的概率,并保留7位小数。
Sample Input
1 0.5
2
2 0.5
2 4
Sample Output
0.5000000
0.2500000
HINT
1≤N≤10
0.25≤p≤0.75
地雷的位置∈[1,100000000]
DP:
\(dp[i]\)表示走过点i时踩雷不幸身亡的概率
\(dp[i]=dp[i-1]*p+dp[i-2]*(1-p)\)
但是数据中地雷的位置的范围过大,肯定不能直接转移。
想到矩阵快速幂
\(\begin{vmatrix}
p & 1-p \\
1 & 0
\end{vmatrix}\)
这个就是初始矩阵,用矩阵快速幂优化DP
#include<bits/stdc++.h>
using namespace std;
int n,a[11];
double ans,p;
struct data
{
double a[2][2];
}t,none;
data operator *(data a,data b)
{
data c=none;
for(int i=0;i<=1;i++)
{
for(int j=0;j<=1;j++)
{
for(int k=0;k<=1;k++)
{
c.a[i][k]+=a.a[i][j]*b.a[j][k];
}
}
}
return c;
}
data poww(data a,int x)//矩阵快速幂
{
data sum=none,num=a;
sum.a[1][1]=sum.a[0][0]=1.0;
while(x)
{
if(x&1)
{
sum=(sum*num);
}
x/=2;
num=(num*num);
}
return sum;
}
int main()
{
while(scanf("%d%lf",&n,&p)!=EOF)
{
ans=1.0;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
sort(a+1,a+n+1);
t.a[0][0]=p;//初始矩阵
t.a[0][1]=1-p;
t.a[1][0]=1.0;
t.a[1][1]=0.0;
for(int i=1;i<=n;i++)
{
data tmp;
if(i==1)
{
tmp=poww(t,a[i]-1);
}else{
tmp=poww(t,a[i]-a[i-1]-1);
}
ans=(ans*(1-tmp.a[0][0]));//乘上不踩雷的概率
}
printf("%.7lf\n",ans);
}
return 0;
}
/*
1 0.5
2
2 0.5
2 4
*/
【POJ3744】Scout YYF I的更多相关文章
- 【poj3744】 Scout YYF I
http://poj.org/problem?id=3744 (题目链接) 题意 给出n个雷,分别在 a[1]...a[n] ,走一步概率为 p ,走两步概率为 1-p ,一开始在 1 号位置,问安全 ...
- 【POJ 3744】 Scout YYF I
[题目链接] http://poj.org/problem?id=3744 [算法] 概率DP + 矩阵乘法 [代码] #include <algorithm> #include < ...
- poj3744 Scout YYF I[概率dp+矩阵优化]
Scout YYF I Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8598 Accepted: 2521 Descr ...
- POJ3744 Scout YYF I (矩阵优化的概率DP)
Scout YYF I YYF is a couragous scout. Now he is on a dangerous mission which is to penetrate into th ...
- [Poj3744]Scout YYF I (概率dp + 矩阵乘法)
Scout YYF I Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9552 Accepted: 2793 Descr ...
- 【云计算】实战-五个Docker监控工具的对比
[实战]五个Docker监控工具的对比 阅读目录 Docker Stats命令 CAdvisor Scout Data Dog Sensu Monitoring Framework 总结 这篇文章作者 ...
- 【06】sass编译工具(弃)
[06]编译工具(弃) SASS转译工具 除了使用sass命令来转译SASS文件之外,还可以借助第三方工具完成,目前世面上较为流行的转译工具主要有: Compass.app Scout Codekit ...
- 【分享】GEARS of DRAGOON 1+2【日文硬盘版】[带全CG存档&攻略+SSG改动+打开存档补丁]
冒险者们哟.寻找龙秘玉吧--! ninetail的最新作,是使用丰富多彩的技能·道具探索迷宫的3D迷宫RPG! 存在着骑士和神官的架空世界常见的职业为首的13种职业.超过数百种的道具的登场! 和伙伴一 ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
随机推荐
- Go语言操作MySQL
MySQL是常用的关系型数据库,本文介绍了Go语言如何操作MySQL数据库. Go操作MySQL 连接 Go语言中的database/sql包提供了保证SQL或类SQL数据库的泛用接口,并不提供具体的 ...
- 05-pandas索引切片读取数据缺失数据处理
引入 numpy已经能够帮助我们处理数据,能够结合matplotlib解决我们数据分析的问题,那么pandas学习的目的在什么地方呢? numpy能够帮我们处理处理数值型数据,但是这还不够 很多时候, ...
- 文件操作——RandomAccessFile
文件操作——RandomAccessFile 构建RandomAccessFileJava提供了一个可以对文件随机访问的操作,访问包括读和写操作.该类名为RandomAccessFile.该类的读 ...
- Android NDK(二) CMake构建工具进行NDK开发
本文目录 一Androidstudio中需要的插件 二项目配置 ①build.gardle配置 ②CMakeLists.txt ③Android和Cpp的代码 ④so文件生成 ⑤so文件的位置 一.A ...
- mobaxterm和CRT的文件上传
版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/submarineas/article/de ...
- A Deep Neural Network Approach To Speech Bandwidth Expansion
题名:一种用于语音带宽扩展的深度神经网络方法 作者:Kehuang Li:Chin-Hui Lee 2015年出来的 摘要 本文提出了一种基于深度神经网络(DNN)的语音带宽扩展(BWE)方法.利用对 ...
- python 报错TypeError: 'range' object does not support item assignment,解决方法
贴问题 nums = range(5)#range is a built-in function that creates a list of integers print(nums)#prints ...
- postman全局变量设置
1.点击小齿轮进入到变量添加页面,点击Globals添加全局变量 2.输入变量名称和变量值 3.接口中设置变量
- 内网渗透bypassuac和smb溢出
对内网渗透需要渗透的目标主机处于跨网段和uac限制的情况做一个渗透记录 环境大致如下 拥有shell权限的win7(有uac限制,处于双网段) 和同win7同一网段下暂时无权限的靶机xp 先对有权限的 ...
- CF401D Roman and Numbers 状压DP
CF401D 题意翻译 将n(n<=10^18)的各位数字重新排列(不允许有前导零) 求 可以构造几个mod m等于0的数字 题目描述 Roman is a young mathematicia ...