用户工具

站点工具


2020-2021:teams:farmer_john:jjleo:2020北交校赛

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
2020-2021:teams:farmer_john:jjleo:2020北交校赛 [2020/06/05 23:07]
jjleo [K]
2020-2021:teams:farmer_john:jjleo:2020北交校赛 [2020/06/25 23:05] (当前版本)
jjleo ↷ 页面2020-2021:teams:farmer_john:2020北交校赛被移动至2020-2021:teams:farmer_john:jjleo:2020北交校赛
行 42: 行 42:
   * 题意:​$n$张地图,每张地图有两种比赛模式,第一种胜率是$p_i$,第二种胜率是$1-q_i$,如果第$i-1$场你赢了,那么第$i$场按照第一种比赛模式进行,否则按照第二种比赛模式进行。每次比赛会选择一个区间按顺序进行比赛,且区间的左端点也就是第一场比赛按照第一种比赛模式进行。$m$次询问某个区间你的胜场期望。$(n,​ m \le 100\,000)$   * 题意:​$n$张地图,每张地图有两种比赛模式,第一种胜率是$p_i$,第二种胜率是$1-q_i$,如果第$i-1$场你赢了,那么第$i$场按照第一种比赛模式进行,否则按照第二种比赛模式进行。每次比赛会选择一个区间按顺序进行比赛,且区间的左端点也就是第一场比赛按照第一种比赛模式进行。$m$次询问某个区间你的胜场期望。$(n,​ m \le 100\,000)$
  
-  * 题解:次方程+拟即可+  * 题解:线段树维护每个区间的$8$个值,分别为,__区间内第场比赛__按照**第一种/​第种**比赛式且__区间内最后一场比赛__**获胜/​失败**的**胜场期望**和**概率**,分别记为$f_{0/​1,​0/​1},​g_{0/​1,​0/​1}$,合并的代码如下。<​code cpp>​inline void up(int x){ 
 + for(register int i = 0;i <= 1;i++){ 
 + for(register int j = 0;j <= 1;j++){ 
 + t[x].f[i][j] = (1ll * t[ls(x)].g[i][0] * t[rs(x)].g[0][j] % p * (t[ls(x)].f[i][0] + t[rs(x)].f[0][j]) % p + 1ll * t[ls(x)].g[i][1] * t[rs(x)].g[1][j] % p * (t[ls(x)].f[i][1] + t[rs(x)].f[1][j]) % p) % p; 
 + t[x].g[i][j] = (1ll * t[ls(x)].g[i][0] * t[rs(x)].g[0][j] % p + 1ll * t[ls(x)].g[i][1] * t[rs(x)].g[1][j] % p) % p; 
 + t[x].f[i][j] = 1ll * t[x].f[i][j] * fpow(t[x].g[i][j],​ p - 2) % p; 
 +
 +
 +}</​code>​特别需要注意,$f_{i,​j}$代表的期望是在不考虑是否满足开头结尾对应的比赛是$i,​j$状态下的期望,而我们在合并的过程中第一个式子是在上述条件下的期望,因此我们需要再除以这个概率才能得到正确的期望。<​del>​这里卡了一万年,我太菜了</​del>​
    
2020-2021/teams/farmer_john/jjleo/2020北交校赛.1591369662.txt.gz · 最后更改: 2020/06/05 23:07 由 jjleo