CF1194F Crossword Expert(数论,组合数学)
不难的一题。不知道为什么能 $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(数论,组合数学)的更多相关文章
- Codeforces - 1194F - Crossword Expert - 组合数学
https://codeforc.es/contest/1194/problem/F 下面是错的. 看起来有点概率dp的感觉? 给你T秒钟时间,你要按顺序处理总共n个事件,每个事件处理花费的时间是ti ...
- 【CF1194F】Crossword Expert(数学 期望)
题目链接 大意 给你\(N\)个事件,解决每个事件所需的时间有\(1/2\)的概率为\(t[i]\),\(1/2\)的概率为\((t[i]+1)\),给你总时间\(T\),在\(T\)时间内按顺序解决 ...
- 数论 - 组合数学 + 素数分解 --- 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 ...
- HDU 4497 数论+组合数学
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4497 解题思路:将满足条件的一组x,z,y都除以G,得到x‘,y',z',满足条件gcd(x',y' ...
- Uva 11076 Add Again (数论+组合数学)
题意:给你N个数,求把他们的全排列加和为多少 思路:对于这道题,假设数字k1在第一位,然后求出剩下N-1位的排列数num1,我们就可以知道k1在第一位时 排列有多少种为kind1, 同理,假设数字k2 ...
- 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 ...
- Codeforces 223C Partial Sums 数论+组合数学
题意非常easy,求不是那么好求的,k非常大 要操作非常多次,所以不可能直接来的.印象中解决操作比較多无非线段树 循环节 矩阵 组合数等等吧,这道题目 也就仅仅能多画画什么 的了 就以第一个案例为主吧 ...
- Crossword Expert CodeForces - 1194F (期望)
大意: $n$个题, 按照第$i$题随机$t_i$或$t_i+1$秒钟完成, 最多做$T$秒, 求做题数期望. 期望转为做题数$\ge x$的方案数之和最后再除以总方案数 这是因为$\sum\limi ...
- Codeforces 1194F. Crossword Expert
传送门 考虑每一个位置的期望贡献 $P[i]$ 对于第 $k$ 个位置,设 $sum=\sum_{i=1}^{k}t[k]$,那么 $T-sum$ 即为用最短时间完成完位置 $k$ 后多出来的空闲时间 ...
随机推荐
- 安装pip-9.0.1-py2.py3-none-any.whl
pip的安装 1.从https://pypi.python.org/pypi/pip#downloads下载所需的.whl文件 2.将下载的文件放入Python的根目录 我的根目录是F:\Python ...
- 关于使用IDEA,使用Maven打包项目
关于使用IDEA,使用Maven打包项目 在近期的一个接口项目中,使用的是SpringBoot + Maven的配置, 由于使用IDEA不久,不太熟悉使用Maven进行项目打包.记录一下. 由于使用的 ...
- 知识图谱与Bert结合
论文题目: ERNIE: Enhanced Language Representation with Informative Entities(THU/ACL2019) 本文的工作也是属于对BERT锦 ...
- 基于Spark的电影推荐系统(推荐系统~7)
基于Spark的电影推荐系统(推荐系统~7) 22/100 发布文章 liuge36 第四部分-推荐系统-实时推荐 本模块基于第4节得到的模型,开始为用户做实时推荐,推荐用户最有可能喜爱的5部电影. ...
- 基于log4net的日志组件扩展封装,实现自动记录交互日志 XYH.Log4Net.Extend(微服务监控)
背景: 随着公司的项目不断的完善,功能越来越复杂,服务也越来越多(微服务),公司迫切需要对整个系统的每一个程序的运行情况进行监控,并且能够实现对自动记录不同服务间的程序调用的交互日志,以及通一个服务或 ...
- Log4基本配置
前言:作为一个程序员你要学会调试,对于一种调试都无法找到问题所在的情况,你要学会看日志,要学会看日志你的学会怎么样去写入日志,接下来教你配置C#Log4 第一步,你的在配置文件中配置好对应的参数 &l ...
- ucoreOS_lab2 实验报告
所有的实验报告将会在 Github 同步更新,更多内容请移步至Github:https://github.com/AngelKitty/review_the_national_post-graduat ...
- spring boot的异常处理
原文:https://blog.csdn.net/tianyaleixiaowu/article/details/70145251 全局异常处理是个比较重要的功能,一般在项目里都会用到. 我大概把一次 ...
- 99%的程序都没有考虑的网络异常?使用Fundebug.notify()主动上报
近日看到一篇文章99%的程序都没有考虑的网络异常,开篇提到: 绝大多数程序只考虑了接口正常工作的场景,而用户在使用我们的产品时遇到的各类异常,全都丢在看似 ok 的 try catch 中.如果没有做 ...
- 使用 Docker Alpine 镜像安装 nginx
微镜像Alpine,Alpine Linux 是一款独立的⾮商业性的通⽤ Linux 发行版,Alpine Linux 围绕 musl libc 和 busybox 构建,尽管体积很小,Apline ...