传送门

设\(f[i]\)为\(i\)位置向左走一步的期望时间,那么答案就是\(\sum_{i=1}^mf[i]\)

首先\(f[n]=1\),设\(p\)为向左的概率,对于\(i<n\)的位置,有$$f[i]=\sum_{j=1}^{\infty}(j+(j-1)\times f[i+1])(1-p)^{j-1}p$$

就是说枚举一下往右走了几次,左边是走了\(j\)次的步数,右边是走了\(j\)次的概率

根据高中数学知识,这是个等比+等差数列的求和,那么推一下式子可得$$f[i]=\frac{1-p}{p}\times(f[i+1]+1)+1$$

用递推可以做到\(O(n)\)的复杂度,可以有70分

考虑一下,对于一个固定的\(p\),整个数列都是已知的,设\(a=\frac{1-p}{p}\),那么有\(f[n]=1,f[n-1]=2a+1,f[n-2]=2a^2+2a+1,...\),我们只要可以快速求出它的后缀和,然后减一减就可以得到答案了。设\(ans[j]=\sum_{i=n-j+1}^n f[i]\),有\(ans[j]=1+2(n-1)a+2(n-2)a^2+...+2a^{n-1}\),这也是一个等比+等差数列的求和,那么化一下式子可得$$ans[i]=\frac{(2-i)a-i+2a2\frac{1-a{i-1}}{1-a}}{a-1}$$

于是就可以直接求出两个后缀和相减得到答案了

注意特判\(i=0\)和\(i=1\)的情况,一个返回\(0\),一个返回\(1\)

注意特判\(a=1\)的情况,这种情况下\(a-1\)没有逆元不能直接带,打表得此时后缀和为\(ans[i]=i^2\),特判掉就好了

//minamoto
#include<bits/stdc++.h>
#define R register
#define ll long long
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
const int P=1e9+7,N=1e6+5;
inline int add(R int x,R int y){return x+y>=P?x+y-P:x+y;}
inline int dec(R int x,R int y){return x-y<0?x-y+P:x-y;}
inline int mul(R int x,R int y){return 1ll*x*y-1ll*x*y/P*P;}
int ksm(R int x,R int y){
R int res=1;
for(;y;y>>=1,x=mul(x,x))if(y&1)res=mul(res,x);
return res;
}
int n,m,p,q,pi,ppi,res,now,f[N],loli;
int calc(R int n){
if(n==0)return 0;if(n==1)return 1;
if(pi==1)return mul(n,n);
res=mul(dec(2,n),pi),res=dec(res,n);
loli=mul(2,mul(pi,pi)),loli=mul(loli,dec(1,ksm(pi,n-1))),
loli=mul(loli,ksm(dec(1,pi),P-2));
return mul(add(res,loli),ksm(dec(pi,1),P-2));
}
int main(){
// freopen("testdata.in","r",stdin);
scanf("%d%d%d%d",&n,&m,&p,&q),pi=mul(p,ksm(q,P-2)),ppi=dec(1,pi);
pi=mul(ppi,ksm(pi,P-2));
printf("%d\n",dec(calc(n),calc(n-m)));
return 0;
}

P5165 xtq的棋盘的更多相关文章

  1. TYVJ1035 棋盘覆盖

    时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 给出一张n*n(n<=100)的国际象棋棋盘,其中被删除了一些点,问可以使用多少1*2的多米诺骨牌进行掩 ...

  2. POJ 1321 棋盘问题(dfs)

    传送门 棋盘问题 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 38297   Accepted: 18761 Descri ...

  3. 设计一个自动生成棋盘格子的JS小程序

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. BZOJ1057[ZJOI2007]棋盘制作 [单调栈]

    题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳. 而我们的 ...

  5. 【BZOJ-3039&1057】玉蟾宫&棋盘制作 悬线法

    3039: 玉蟾宫 Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 753  Solved: 444[Submit][Status][Discuss] D ...

  6. 【ZJOI2007】棋盘制作 BZOJ1057

    Description 国 际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方 阵,对应八八六十四卦,黑白对 ...

  7. Unity手撸2048小游戏——自动生成4*4棋盘

    1.新建文件夹,命prefabs,将刚刚做成的Chessman拖入该文件下,做成预制体 2.删除panel下的Chessman 3.在panel下,新建一个空对象,命名为Chessboard,大小设置 ...

  8. C# 围棋盘的画法

    C#绘图不是那么美,不过对于简单的图形,不注重美感的图质,用C#还是很方便的. 背景颜色.绘制图表线色.纵横列大小可按照个人喜好调节. 不提供AI代码,我自己设计的AI不是很完美,就不拿出来献丑了,算 ...

  9. 炮(棋盘DP)

    一直以为自己写的就是状态压缩,结果写完才知道是个棋盘dp 首先看一下题目 嗯,象棋 ,还是只有炮的象棋 对于方案数有几种,我第一个考虑是dfs,但是超时稳稳的,所以果断放弃 然后记得以前有过和这个题差 ...

随机推荐

  1. 怎样去除JSP页面提示:Cannot return from outside a function or method.

     今天用myeclipse10写JSP页面时出现: Cannot return from outside a function or method. onClick="return ch ...

  2. LeetCode——Remove Nth Node From End of List

    Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...

  3. JSP简明教程:汇总

    原创JSP教程,简洁明了,不含废话. JSP简明教程(一):JSP简单介绍 JSP简明教程(二):JSP基本的语法 JSP简明教程(三):JSP隐含对象 JSP简明教程(四):EL表达式语言.Java ...

  4. HashTable源代码剖析

    <span style="font-size:14px;font-weight: normal;">public class Hashtable<K,V> ...

  5. Django-权限信息中间件操作

    # 在当前app下新建一个middleware的文件夹,然后就可以尽情的写中间件了,只能是这个名字,切记~@!import re from django.shortcuts import redire ...

  6. 李洪强iOS开发之- 点击屏幕遮挡键盘

    李洪强iOS开发之- 点击屏幕遮挡键盘 实现的效果:  01 - 给当前的view添加点击事件,使点击屏幕的时候,让键盘退出 /** * 点击屏幕 隐藏键盘 * * @param tap */-(vo ...

  7. sanic官方文档解析之蓝图

    1,蓝图(Blueprints) 蓝图可用于子路由的应用,代替增加路由的存在,蓝图的定义和增加路由的方法相似,灵活的在应用中注册,并且可插拔的方式. 尤其是在大型应用中使用蓝图的时候在你逻辑打断的地方 ...

  8. ZOJ 3874 Permutation Graph 分治NTT

    Permutation Graph Time Limit: 2 Seconds      Memory Limit: 65536 KB Edward has a permutation {a1, a2 ...

  9. weblogic启动后 登陆控制台特别慢的问题

    weblogic官方文档给出的问题原因: 江湖偏方: 修改jdk:修改$JAVA_HOME/jre/lib/security/java.security文件,替换securerandom.source ...

  10. Robots协议应用与写法研究