不难的一题。不知道为什么能 $2500$……

不过场上推错了一直不会优化……

首先考虑 $f_i$ 表示恰好做完前 $i$ 道题的概率。

这样很难算。修改一下,$f_i$ 表示做完至少 $i$ 道题的概率。

答案就是 $\sum\limits_{i=0}^ni(f_i-f_{i+1})=\sum\limits_{i=1}^nf_i$。

由于每道题只可能多用至多一秒,考虑 $dp[i][j]$ 为前 $i$ 道题恰好SB $j$ 次的概率。

初始状态是 $dp[0][0]=1$。转移是 $dp[i][j]=\dfrac{1}{2}(f[i-1][j]+f[i-1][j-1])$。

盯着式子看不难看出 $dp[i][j]=(\dfrac{1}{2})^i\dbinom{i}{j}$。用实际意义也不难理解。

(场上就是这里推成了 $(\dfrac{1}{2})^{i+j}\dbinom{i+j}{i}$ 就自闭了……)

那么有 $f_i=\sum\limits_{j=0}^{r_i}dp[i][j]=(\dfrac{1}{2})^i\sum\limits_{j=0}^{r_i}\dbinom{i}{j}$。其中 $r_i=T-\sum\limits_{j=1}^it_j$,表示最多允许SB几次。(其实要和 $i$ 取个 $\min$,但是不影响,可以想一想为什么)

问题就是求 $\sum\limits_{j=0}^{r_i}\dbinom{i}{j}$ 了。接下来是一个很妙的做法。

首先 $i=1$ 时直接暴力。

然后 $\sum\limits_{j=0}^{r_i}\dbinom{i+1}{j}=\sum\limits_{j=0}^{r_i}(\dbinom{i}{j}+\dbinom{i}{j-1})=2\sum\limits_{j=0}^{r_i}\dbinom{i}{j}-\dbinom{i}{r_i}$。可以直接递推。

由于 $r_i$ 单调递减,递推完之后把 $r_{i+1}+1$ 到 $r_i$ 的组合数都删掉就行了。

实现优秀一点可以做到 $O(n)$。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=,mod=,inv2=;
#define FOR(i,a,b) for(int i=(a);i<=(b);i++)
#define ROF(i,a,b) for(int i=(a);i>=(b);i--)
#define MEM(x,v) memset(x,v,sizeof(x))
inline ll read(){
ll x=,f=;char ch=getchar();
while(ch<'' || ch>'') f|=ch=='-',ch=getchar();
while(ch>='' && ch<='') x=x*+ch-'',ch=getchar();
return f?-x:x;
}
int n,t[maxn],fac[maxn],inv[maxn],invfac[maxn],f[maxn],ans,pro=;
ll r[maxn];
int C(int n,ll m){
if(n<m) return ;
return 1ll*fac[n]*invfac[m]%mod*invfac[n-m]%mod;
}
int main(){
n=read();r[]=read();
FOR(i,,n) t[i]=read();
FOR(i,,n) r[i]=r[i-]-t[i];
fac[]=fac[]=inv[]=invfac[]=invfac[]=;
FOR(i,,n){
fac[i]=1ll*fac[i-]*i%mod;
inv[i]=mod-1ll*(mod/i)*inv[mod%i]%mod;
invfac[i]=1ll*invfac[i-]*inv[i]%mod;
}
FOR(i,,min(1ll,r[])) f[]=(f[]+C(,i))%mod;
FOR(i,,n){
if(r[i]<) break;
f[i]=(2ll*f[i-]-C(i-,r[i-])+mod)%mod;
ROF(j,min<ll>(i,r[i-]),r[i]+) f[i]=(f[i]-C(i,j)+mod)%mod;
}
FOR(i,,n){
if(r[i]<) break;
pro=1ll*pro*inv2%mod;
ans=(ans+1ll*pro*f[i])%mod;
}
printf("%d\n",ans);
}

CF1194F Crossword Expert(数论,组合数学)的更多相关文章

  1. Codeforces - 1194F - Crossword Expert - 组合数学

    https://codeforc.es/contest/1194/problem/F 下面是错的. 看起来有点概率dp的感觉? 给你T秒钟时间,你要按顺序处理总共n个事件,每个事件处理花费的时间是ti ...

  2. 【CF1194F】Crossword Expert(数学 期望)

    题目链接 大意 给你\(N\)个事件,解决每个事件所需的时间有\(1/2\)的概率为\(t[i]\),\(1/2\)的概率为\((t[i]+1)\),给你总时间\(T\),在\(T\)时间内按顺序解决 ...

  3. 数论 - 组合数学 + 素数分解 --- hdu 2284 : Solve the puzzle, Save the world!

    Solve the puzzle, Save the world! Problem Description In the popular TV series Heroes, there is a ta ...

  4. HDU 4497 数论+组合数学

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4497 解题思路:将满足条件的一组x,z,y都除以G,得到x‘,y',z',满足条件gcd(x',y' ...

  5. Uva 11076 Add Again (数论+组合数学)

    题意:给你N个数,求把他们的全排列加和为多少 思路:对于这道题,假设数字k1在第一位,然后求出剩下N-1位的排列数num1,我们就可以知道k1在第一位时 排列有多少种为kind1, 同理,假设数字k2 ...

  6. Codeforces Round #447 (Div. 2) B. Ralph And His Magic Field【数论/组合数学】

    B. Ralph And His Magic Field time limit per test 1 second memory limit per test 256 megabytes input ...

  7. Codeforces 223C Partial Sums 数论+组合数学

    题意非常easy,求不是那么好求的,k非常大 要操作非常多次,所以不可能直接来的.印象中解决操作比較多无非线段树 循环节 矩阵 组合数等等吧,这道题目 也就仅仅能多画画什么 的了 就以第一个案例为主吧 ...

  8. Crossword Expert CodeForces - 1194F (期望)

    大意: $n$个题, 按照第$i$题随机$t_i$或$t_i+1$秒钟完成, 最多做$T$秒, 求做题数期望. 期望转为做题数$\ge x$的方案数之和最后再除以总方案数 这是因为$\sum\limi ...

  9. Codeforces 1194F. Crossword Expert

    传送门 考虑每一个位置的期望贡献 $P[i]$ 对于第 $k$ 个位置,设 $sum=\sum_{i=1}^{k}t[k]$,那么 $T-sum$ 即为用最短时间完成完位置 $k$ 后多出来的空闲时间 ...

随机推荐

  1. IDEA快速修复错误快捷键

    有的时候在IDEA中编写代码,会出现错误提示,比如需要处理异常 将光标移动到出错,也就是划红线的地方,行首会出现一个小灯泡,点击会出现图二,可以按照提示进行修复

  2. 一张图搞定 .NET Framework, .NET Core 和 .NET Standard 的区别

    最近开始研究.NET Core,有张图一看就能明白他们之前的关系. 上图己经能够说明.NET Framework和.NET Core其实是实现了 .NET Standard相关的东西,或者说Frame ...

  3. VS2019打开旧项目导致引用失效的解决方案

    用VS2019打开VS2015创建的MVC项目时所有引用全部失效: 解决方案: 打开项目的csproj文件,删除 Target节点,在重新打开项目. <Target Name="Ens ...

  4. Object.defineProperty-vuejs数据响应基石

    https://www.jianshu.com/p/07ba2b0c8fca https://juejin.im/post/5b99215d5188255c520cfe22 vuejs数据双向绑定地核 ...

  5. PC端页面适应不同的分辨率的方法

    原文链接:https://www.jianshu.com/p/4850a7b22228 一.根据不同的分辨率,加载不同的CSS样式文件 这个方法的思路是,分别针对800.1280.1440.1600. ...

  6. webpack4 css modules

    demo 代码点此,webpack4 中通过 css-loader 开启 css 模块化, 开始前先做点准备工作. 不了解 css 模块化的,可以前往查看github_css_modules. ##准 ...

  7. undefined reference to `BN_new'

    出现如下错误 undefined reference to `BN_CTX_new' undefined reference to `BN_new' undefined reference to `B ...

  8. Can't toast on a thread that has not called Looper.prepare()

    Android开发中Can't toast on a thread that has not called Looper.prepare()问题 说一下问题出现场景: 在一个Android项目中,利用 ...

  9. Alpha七天冲刺

    一. 原计划冲刺甘特图 二. 七天冲刺博客 1. https://www.cnblogs.com/liujiamei/p/11870107.html 2. https://www.cnblogs.co ...

  10. [b0010] windows 下 eclipse 开发 hdfs程序样例 (二)

    目的: 学习windows 开发hadoop程序的配置 相关: [b0007] windows 下 eclipse 开发 hdfs程序样例 环境: 基于以下环境配置好后. [b0008] Window ...