题目

题意: $ yyf $ 一开始在 $ 1 $ 号节点他要通过一条有 $ n $ 个地雷的道路,每次前进他有 $ p $ 的概率前进一步,有 $ 1-p $ 的概率前进两步,问他不领盒饭的概率。

对于这道题我们可以考虑 $ dp $ ,我们可以设计状态 $ f[i] $ 表示安全通过 $ i $的概率,那么我们可以得到状态转移方程

$ f[i]=p* f[i-1]+(1-p)* f[i-2] $

$ f[x_i]=0 $

然后我们可以看到 $ x \in [1, 100000000] $如果我们直接 $ dp $ 很明显会超时那么怎么办呢?我们可以去考虑进行分段 $ dp $ 。我们可以观察发现在你到一个地雷前,这其中的概率只与这个地雷有关就可以把区间进行缩小然后 $ dp $

$ a[1],a[2],a[3]......a[x[1]] $

$ a[x[1]+1],a[x[1]+2],a[x[1]+3]......a[x[2]] $

$ .......... $

$ a[x[n-1]+1],a[x[n-1]+2],a[x[n-1]+3]......a[x[n]] $

然后我们看到这个状态转移方程

$ f[i]=p* f[i-1]+(1-p)* f[i-2] $

是不是很像

$ f[i]=f[i-1]+ f[i-2] $

就可以看作斐波那契数列加了个参数可以使用矩阵加速(对于这个网上有很多题解,这里就不讲这个讲下别的)

我们可以利用这个式子的特征方程进行求解(关于这一类方程

首先我们可以写出它的特征方程 $ x^2=px+* (1-p) $

移项后得 $ x^2-px+p-1=0 $

利用求根公式得到两个不同的可行解 $ x_1=p-1 \ \ \ \ x_2= 1 $

就可以写出通项公式 $ f(n)=c_1x_1n+c_2x_2n $

即 $ f(n)=c_1* 1^n +c_2 * (p-1)^n $

然后我们可以将 $ f(1)=1,f(2)=p $ 带入可以知道 $ c_1=\frac{1}{2-p} \ \ \ c_2=\frac{1}{p-2} $

最后的通项公式就是 $ f(n)=\frac{1-(p-1)^n}{2-p} $

最后用快速幂求出 $ 1-(p-1)^n $ 即可

代码

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int n,x[30];
double p,ans;
double power(int y){
double tmp=1;double x=p-1.0;//注意类型
while(y){
if(y&1) tmp*=x;
x*=x;
y>>=1;
}
return tmp;
}
int main(){
while(scanf("%d %lf",&n,&p)!=EOF){
for(int i=1;i<=n;++i) scanf("%d",&x[i]);
ans=1;x[0]=0;
sort(x+1,x+1+n);//原来的地雷不一定有序
for(int i=1;i<=n;++i){
int tmp=x[i]-x[i-1]-1;//走到地雷前
ans*=((1.0-power(tmp))/(2.0-p));
if(fabs(ans)<1e-8) break;//为0直接退出
ans*=(1.0-p);//跳过地雷,走两步
}
printf("%.7lf\n",ans);
}
return 0;
}

最新文章

  1. UWP学习记录1-开端
  2. aspx页面,中文乱码解决方案
  3. 顺序队列C/C++实现
  4. PHP 5.4 中经 htmlspecialchars 转义后的中文字符串为空,DeDeCMS在PHP5.4下编辑器中文不显示问题
  5. Windows Server 2003搭建FTP服务器 实现盘符之间切换
  6. POJ 3630- Phone List(Trie)
  7. 拉姆达表达式 追加 条件判断 Expression&lt;Func&lt;T, bool&gt;&gt;
  8. Jquery动态插入table行
  9. 天天果园,中粮我买网等生鲜APP竞品分析
  10. 误删libc.os.6共享库的解决办法
  11. ssm web.xml配置解析
  12. 0基础如何学Android开发
  13. 在cxGrid表格中如何获得当前列的字段名
  14. golang 中处理大规模tcp socket网络连接的方法,相当于c语言的 poll 或 epoll
  15. js 小结
  16. Java(C#)基础差异-数组
  17. jQuery事件处理(七)
  18. zabbix-agent报错:zabbix_agentd [5922]: cannot open log: cannot create semaphore set: [28] No space left on device
  19. Finding LCM LightOJ - 1215 (水题)
  20. 优先队列:POJ No 3614 Sunscreen 贪心

热门文章

  1. Pandas的基本用法
  2. C语言博客作业—2019-指针
  3. Element源码---初识框架
  4. Cobaltstrike与Metasploit会话转换
  5. Linux 磁盘格式化、检验、挂载
  6. JAVA从服务器下载文件根据Url把多文件打包成ZIP下载
  7. Nginx Windows版安装及域名绑定
  8. 微信小程序的跳转navigateTo()和redirectTo()用法和区别
  9. Innodb的redo log block
  10. (转)tomcat 安全配置文档