传送门

设\(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. HTML--比较实用的小例子

    常用的前端实例: 1略 2.在网页商城中的图片当我们把鼠标放上去之后,图片会显示一个有颜色的外边框,图片某一部分的字体的颜色并发生改变 鼠标放上去之前 鼠标放上去之后: 实现的代码: <!DOC ...

  2. 安卓APK瘦身

    之前打包的时候直接就用eclipse或者android studio直接生成签名文件,并没有关心大小问题,近期有人问我有没有对APK进行瘦身.对这方面内容一致没有关注过,今天试用了各种方式把项目签名a ...

  3. [UnityShader3]溶解与重现效果

    參考链接:http://www.cnblogs.com/Esfog/p/DissolveShader.html 效果图: 从颜色变化来说,有三种,一种是纹理颜色.一种是纹理与黑边的混合颜色,一种是透明 ...

  4. Android学习笔记(十)——使用意图链接活动

    使用意图链接活动 1.新建一个名为"UsingIntent"的项目,右击src目录下的包名,选择New-->Class选项.并将新的类文件名称命名为"SecondA ...

  5. IPv4与IPv6数据报格式

    IPv4: IPv4数据报中的字段: 版本号:规定了数据报的IP协议版本,通过查看版本号,路由器能够确定如何解释IP数据报的剩余部分,因为不同IP版本使用不同的数据报格式. 首部长度:IPv4数据报可 ...

  6. vue 计算属性与侦听器

    侦听器:顾名思义,就是用来监听数据变化用的.侦听器在vue实例中,定义变量watch来使用.监听新值newVal和旧值oldVal,具体使用方法如下: <!DOCTYPE html> &l ...

  7. LeetCode(66)题解: Plus One

    https://leetcode.com/problems/plus-one/ 题目: Given a non-negative number represented as an array of d ...

  8. Hadoop每日一讨论整理版

    这是我在几个QQ群发起的Hadoop每日一讨论小活动,每天中午2点左右发出一个关于Hadoop的知识片段,在此做一个整理. [每日一讨论]之计算框架(2013-5-21) 就计算框架而言,Hadoop ...

  9. POJ 2482 Stars in Your Window(线段树+扫描线)

    题目链接 非常不容易的一道题,把每个点向右上构造一个矩形,将问题转化为重合矩形那个亮度最大,注意LL,注意排序. #include <cstdio> #include <cstrin ...

  10. 在Android Studio中移除导入的模块依赖

    进入settings.gradle(Project Settings) include ':app', ':pull_down_list_view' 要移除的Module dependency为“pu ...