分析
禁不住 QuantAsk 的诱惑(bushi)
考虑一条路线可以由若干段 (1-2-dots-n-dots-2) 以及 最后一段 (1-dots-x) 组成。
对于最后一段可以求出它的期望时间设为 (len) ,对于这若干段循环节,可以求出它的概率设为 (P),
那么最终的期望时间 (ans=P(ans+2n-2)+len)
也就是有 (P) 的概率会多走 (2n-2) 步,否则期望走 (len) 步终止
把方程解出来得到 (ans=frac{P(2n-2)+len}{1-P})
代码
#include <cstdio>
#define rr register
using namespace std;
const int mod=1000000007;
int n,A,B,C,len,P=1,p[2000011];
inline signed ksm(int x,int y){
rr int ans=1;
for (;y;y>>=1,x=1ll*x*x%mod)
if (y&1) ans=1ll*ans*x%mod;
return ans;
}
signed main(){
scanf("%d%d%d%d%d",&n,&p[1],&A,&B,&C);
for (rr int i=2;i<=n;++i) p[i]=p[n*2-i]=(1ll*A*p[i-1]%mod*p[i-1]+1ll*B*p[i-1]+C)%mod;
for (rr int i=1;i<2*n-1;++i){
len=(len+(i-1ll)*P%mod*p[i]%mod)%mod;
P=(mod-p[i]+1ll)*P%mod;
}
len=(len+P*(2ll*n-2)%mod)%mod;
return !printf("%lld",1ll*len*ksm(mod-P+1,mod-2)%mod);
}