Codeforces 1194F. Crossword Expert
考虑每一个位置的期望贡献 $P[i]$
对于第 $k$ 个位置,设 $sum=\sum_{i=1}^{k}t[k]$,那么 $T-sum$ 即为用最短时间完成完位置 $k$ 后多出来的空闲时间
如果 $T-sum>=k$ 那么这个位置一定能完成,贡献为 $1$
如果 $T<sum$ ,那么这个位置一定没法完成,贡献为 $0$
否则设 $mx=max(T-sum,k)$,那么这个位置完成的总情况数就是在多出来的时间内任选几个位置多花费 $1$
那么这个位置有 $\sum_{i=0}^{mx} \binom {mx}{i} $ 种不同的合法方案,再除以总方案数 $2^k$ 即为概率
因为价值为 $1$,那么期望贡献 $P[i]$ 就是 $\frac {1} {2^k} \sum_{i=0}^{mx} \binom {mx}{i} $
然后发现直接计算一堆组合数的复杂度是 $n^2$ 的,考虑如何优化计算过程
注意到我们每次算组合数时的 $\binom {mx} {i} $ 的 $mx$ 是单调递减的(显然只要考虑 $T-sum<k$ 时的情况),并且每次 $i$ 加一
考虑杨辉三角递推组合数时,$2\sum_{j=0}^{x}\binom {i}{j}=(\sum_{j=0}^{x}\binom {i+1}{j})+\binom {i}{x}$(这个自己画一下杨辉三角就知道了)
那么我们就可以动态维护 $now=\sum_{i=0}^{mx} \binom {mx}{i}$,然后每到下一层就 $now=now*2-\binom {i-1}{mx_{i-1}}$
然后再利用 $mx$ 的单调性直接暴力维护一下 $now$ 即可做到 $O(n)$
然后就过了,注意 $long\ long$
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
inline ll read()
{
ll x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=4e5+,mo=1e9+;
inline int fk(int x) { return x>=mo ? x-mo : x; }
int n,t[N],fac[N],finv[N],ans;
ll T;
inline int ksm(int x,int y)
{
int res=;
while(y) { if(y&) res=1ll*res*x%mo; x=1ll*x*x%mo; y>>=; }
return res;
}
inline int C(int x,int y) { return 1ll*fac[x]*finv[y]%mo*finv[x-y]%mo; }
int main()
{
n=read(); T=read();
fac[]=; finv[]=;
for(int i=;i<=n;i++)
{
t[i]=read();
fac[i]=1ll*fac[i-]*i%mo;
finv[i]=ksm(fac[i],mo-);
}
int i2=,now=,pre=; ll sum=;
for(int i=;i<=n;i++)
{
sum+=t[i]; i2=fk(i2+i2);
if(T-sum>=i) { ans++; continue; }
if(T-sum<) break;
int mx=T-sum;
if(!now)
{
for(int j=;j<=mx;j++) now=fk(now+C(i,j));
pre=mx; ans=fk(ans+1ll*now*ksm(i2,mo-)%mo);
continue;
}
now=fk( fk(now+now)-C(i-,pre)+mo );
while(pre>mx) now=fk(now-C(i,pre)+mo),pre--;
ans=fk(ans+1ll*now*ksm(i2,mo-)%mo);
}
printf("%d\n",ans);
return ;
}
Codeforces 1194F. Crossword Expert的更多相关文章
- Codeforces - 1194F - Crossword Expert - 组合数学
https://codeforc.es/contest/1194/problem/F 下面是错的. 看起来有点概率dp的感觉? 给你T秒钟时间,你要按顺序处理总共n个事件,每个事件处理花费的时间是ti ...
- Crossword Expert CodeForces - 1194F (期望)
大意: $n$个题, 按照第$i$题随机$t_i$或$t_i+1$秒钟完成, 最多做$T$秒, 求做题数期望. 期望转为做题数$\ge x$的方案数之和最后再除以总方案数 这是因为$\sum\limi ...
- Codeforces 1090B - LaTeX Expert - [字符串模拟][2018-2019 Russia Open High School Programming Contest Problem B]
题目链接:https://codeforces.com/contest/1090/problem/B Examplesstandard input The most famous characters ...
- codeforces 1194F (组合数学)
Codeforces 11194F (组合数学) 传送门:https://codeforces.com/contest/1194/problem/F 题意: 你有n个事件,你需要按照1~n的顺序完成这 ...
- CF1194F Crossword Expert(数论,组合数学)
不难的一题.不知道为什么能 $2500$…… 不过场上推错了一直不会优化…… 首先考虑 $f_i$ 表示恰好做完前 $i$ 道题的概率. 这样很难算.修改一下,$f_i$ 表示做完至少 $i$ 道题的 ...
- 【CF1194F】Crossword Expert(数学 期望)
题目链接 大意 给你\(N\)个事件,解决每个事件所需的时间有\(1/2\)的概率为\(t[i]\),\(1/2\)的概率为\((t[i]+1)\),给你总时间\(T\),在\(T\)时间内按顺序解决 ...
- Codeforces Round #374 (Div. 2) A. One-dimensional Japanese Crossword —— 基础题
题目链接:http://codeforces.com/contest/721/problem/A A. One-dimensional Japanese Crossword time limit pe ...
- Codeforces Round #422 (Div. 2) B. Crossword solving 枚举
B. Crossword solving Erelong Leha was bored by calculating of the greatest common divisor of two ...
- 【Codeforces Round #422 (Div. 2) B】Crossword solving
[题目链接]:http://codeforces.com/contest/822/problem/B [题意] 让你用s去匹配t,问你最少需要修改s中的多少个字符; 才能在t中匹配到s; [题解] O ...
随机推荐
- <% 拼写页面
js中 function udSelect(obj){ var val = $("#"+obj.id).val(); $("select[cd="+obj.id ...
- Nodepad++中将Tab键替换为空格
Nodepad++是一个非常优秀的文本编辑工具,本人经常使用其编辑shell脚本,如果不进行设置,Tab键和空格混用,脚本上传到linux后,格式错乱,不容易查看. 设置方式 菜单栏选择"设 ...
- java 直接内存
android 内存结构 : dalvik(jvm)内存---navtive men 两部分. 这个概念相信有经验的开发人员都会知道. java虚拟机分配到的内存是有限的,根据手机不同,大小不一,但也 ...
- 本地oracle可以通过localhost连接,无法通过ip地址连接解决方法,oracle远程连接配置
Oracle11g安装后只有本地可以连接,远程无法连接,而且本地只能配置成localhost配置成IP地址也无法连接. 这是因为安装oracle的时候没有配置远程的监听,默认的监听是localhost ...
- Cortex-M3 双堆栈指针(MSP&PSP)
[双堆栈指针(MSP&PSP)] Cortex-M3内核中有两个堆栈指针(MSP & PSP),但任何时刻只能使用到其中一个. 复位后处于线程模式特权级,默认使用MSP. 通过SP访问 ...
- DOM解析和SAX解析对比
原理: 一次性加载xml文档,不适合大容量的文件读取 原理: 加载一点,读取一点,处理一点.适合大容量文件的读取 DOM解析可以任意进行增删改成 SAX解析只能读取 DOM解析任意读取任何位置的数据, ...
- 七十七:flask.Restful之flask-Restful参数验证
flask_restful插件提供了reqparse来做类似WTForms的验证功能来校验数据,add_argument可以指定这个字段的名字.数据类型等1.default:默认值,若没有传入此次参数 ...
- (4)rapidxml的详解及使用
RapidXml是指 XML DOM解析工具包,是一个快速的读写xml文件的库文件(hpp). (1)创建XML文件 #include <iostream> #includ ...
- SAS数据挖掘实战篇【一】
SAS数据挖掘实战篇[一] 1数据挖掘简介 1.1数据挖掘的产生 需求是一切技术之母,管理和计算机技术的发展,促使数据挖掘技术的诞生.随着世界信息技术的迅猛发展,信息量也呈几何指数增长,如何从巨量.复 ...
- Linux 下 Mysql忘记密码重置
1.修改配置文件 /etc/my.cnf 在[mysqld]下 加入skip-grant-tables 2.重启mysql 命令:service mysqld restart 3.等待几分钟后 就可以 ...