CF1153F Serval and Bonus Problem 【期望】
题目链接:洛谷
作为一只沉迷数学多年的蒟蒻OIer,在推柿子和dp之间肯定要选推柿子的!
首先假设线段长度为1,最后答案乘上$l$即可。
对于$x$这个位置,被区间覆盖的概率是$2x(1-x)$(线段端点分别在$x$的两边),不被区间覆盖的概率为$1-2x(1-x)$。
$$Ans=\sum_{i=k}^n {n\choose i}\int_{0}^1(2x(1-x))^i(1-2x(1-x))^{n-i}dx$$
$$=\sum_{i=k}^n {n\choose i}\int_{0}^1(2x(1-x))^i\sum_{j=0}^{n-i}(-1)^j{n-i\choose j}(2x(1-x))^jdx$$
$$=\sum_{i=k}^n{n\choose i}\sum_{j=0}^{n-i}(-1)^j2^{i+j}{n-i\choose j}\int_0^1x^{i+j}(1-x)^{i+j}dx$$
$$F_i=\int_0^1x^i(1-x)^idx$$
$$=\int_0^1x^i\sum_{j=0}^i(-1)^j{i\choose j}x^jdx$$
$$=\sum_{j=0}^i(-1)^j{i\choose j}\int_0^1x^{i+j}dx$$
$$=\sum_{j=0}^i(-1)^j{i\choose j}\frac{1}{i+j+1}$$
预处理$F_i$之后计算,时间复杂度$O(n^2)$。
#include<bits/stdc++.h>
#define Rint register int
using namespace std;
typedef long long LL;
const int N = , mod = ;
int fac[N], inv[N], invfac[N], po[N];
inline void init(int m){
fac[] = ;
for(Rint i = ;i <= m;i ++) fac[i] = (LL) i * fac[i - ] % mod;
inv[] = ;
for(Rint i = ;i <= m;i ++) inv[i] = (LL) (mod - mod / i) * inv[mod % i] % mod;
invfac[] = ;
for(Rint i = ;i <= m;i ++) invfac[i] = (LL) invfac[i - ] * inv[i] % mod;
po[] = ;
for(Rint i = ;i <= m;i ++) po[i] = (po[i - ] << ) % mod;
}
inline int C(int n, int m){
if(n < m || m < ) return ;
return (LL) fac[n] * invfac[n - m] % mod * invfac[m] % mod;
}
int n, k, l, ans, f[N];
int main(){
scanf("%d%d%d", &n, &k, &l);
init(n << | );
for(Rint i = k;i <= n;i ++)
for(Rint j = ;j <= i;j ++){
int t = (LL) C(i, j) * inv[i + j + ] % mod;
if(j & ) f[i] = (f[i] + mod - t) % mod; else f[i] = (f[i] + t) % mod;
}
for(Rint i = k;i <= n;i ++){
int t1 = ;
for(Rint j = ;j <= n - i;j ++){
int t2 = (LL) po[i + j] * C(n - i, j) % mod * f[i + j] % mod;
if(j & ) t1 = (t1 + mod - t2) % mod; else t1 = (t1 + t2) % mod;
}
ans = (ans + (LL) t1 * C(n, i) % mod) % mod;
}
printf("%d", (LL) l * ans % mod);
}
CF1153F
据说这个式子还可以用NTT优化到$O(n\log n)$?有兴趣的各位可以思考一下反正我是没兴趣了
upd(2019-10-18):
貌似有一个东西叫做Beta Function.
$$\begin{aligned}\Beta(x,y)&=\int_0^1t^x(1-t)^y\mathrm{d}t & (x,y\in \R_+)\\ \Gamma(z)&=\int_0^{+\infty}x^{z-1}e^{-x}\mathrm{d}x & (\Re(z)>0)\end{aligned}$$
有一些不知道为什么的结论。
$$\begin{aligned}\Gamma(n)&=(n-1)! & (n\in \N_+) \\ \Beta(x,y)&=\frac{\Gamma(x)\Gamma(y)}{\Gamma(x+y)}\end{aligned}$$
于是上面的$F_i$直接就做完了。稍微化化就可以用NTT来做了。
CF1153F Serval and Bonus Problem 【期望】的更多相关文章
- CF1153F Serval and Bonus Problem FFT
CF1153F Serval and Bonus Problem 官方的解法是\(O(n ^ 2)\)的,这里给出一个\(O(n \log n)\)的做法. 首先对于长度为\(l\)的线段,显然它的答 ...
- CF1153F Serval and Bonus Problem
Serval and Bonus Problem 1.转化为l=1,最后乘上l 2.对于一个方案,就是随便选择一个点,选在合法区间内的概率 3.对于本质相同的所有方案考虑在一起,贡献就是合法区间个数/ ...
- Codeforces 1153F Serval and Bonus Problem [积分,期望]
Codeforces 思路 去他的DP,暴力积分多好-- 首先发现\(l\)没有用,所以不管它. 然后考虑期望的线性性,可以知道答案就是 \[ \int_0^1 \left[ \sum_{i=k}^n ...
- Codeforces1153F Serval and Bonus Problem 【组合数】
题目分析: 我们思考正好被k个区间覆盖的情况,那么当前这个子段是不是把所有的点分成了两个部分,那么在两个部分之间相互连k条线,再对于剩下的分别连线就很好了?这个东西不难用组合数写出来. 然后我们要证明 ...
- CF1153 F. Serval and Bonus Problem(dp)
题意 一个长为 \(l\) 的线段,每次等概率选择线段上两个点,共选出 \(n\) 条线段,求至少被 \(k\) 条线段覆盖的长度期望. 数据范围 \(1 \le k \le n \le 2000, ...
- Codeforces Round #551 (Div. 2) F. Serval and Bonus Problem (DP/FFT)
yyb大佬的博客 这线段期望好神啊... 还有O(nlogn)FFTO(nlogn)FFTO(nlogn)FFT的做法 Freopen大佬的博客 本蒟蒻只会O(n2)O(n^2)O(n2) CODE ...
- @codeforces - 1153F@ Serval and Bonus Problem
目录 @description@ @solution@ @accepted code@ @details@ @description@ 从一条长度为 l 的线段中随机选择 n 条线段,共 2*n 个线 ...
- Codeforces Round #551 (Div. 2) EF Solution
E. Serval and Snake 对于一个矩形,如果蛇的一条边与它相交,就意味着这条蛇从矩形内穿到矩形外,或者从矩形外穿到矩形内.所以如果某个矩形的答案为偶数,意味着蛇的头尾在矩形的同一侧(内或 ...
- 【Codeforces】Codeforces Round #551 (Div. 2)
Codeforces Round #551 (Div. 2) 算是放弃颓废决定好好打比赛好好刷题的开始吧 A. Serval and Bus 处理每个巴士最早到站且大于t的时间 #include &l ...
随机推荐
- Ubuntu Server 18.04 无法修改 hostname
对于运维而言,我们希望每台服务器的 hostname 都能体现出它自己的功能/ip,方便排查. ubuntu server live 18.04 的安装流程非常友好,从 ip 到 hostname 都 ...
- (五)lucene之特定项搜索和查询表达式
需求:模糊搜索. 前提: 本例中使用lucene 5.3.0 package com.shyroke.lucene; import java.io.File; import java.io.File ...
- C# EF & linq 常用操作
一.EF的左连接 在EF中,当在dbset使用join关联多表查询时,连接查询的表如果没有建立相应的外键关系时,EF生成的SQL语句是inner join(内联),对于inner join,有所了解的 ...
- Uwl.Admin开源框架(一)
1.前言 作为一个忠实的软粉,一直期待微软出跨平台,一直在等待.Net Core,因为刚毕业对于.Net的很多东西不是很熟知,就开始了.Net Core的摸索,一路上坎坎坷坷,对于新技术一直很期待,就 ...
- flex 布局方式
开始啦 1. flex-direction 有关主轴的对齐方式 column 自上到下 row 自左到右 -->默认值 row-reverse 自右到左 column-reverse 自下到上 ...
- element-ui重置表单并清除校验的方法
this.$refs['activityForm'].resetFields(); 只会重置之前表单的内容,并不会清空 只需在关闭弹框的cancel方法中写上重置表单的方法即可 cancel() { ...
- IDEA 导入jar包
项IDEA的项目中导入下载好的jar包: 在intelij IDEA 中,点击File-Project Structure,出现界面的左侧点击Modules,然后点击“+”. 然后找到你要导入的jar ...
- C和指针--预处理器
编译一个C程序的第1个步骤是预处理(preprocessing)阶段.C预处理器在源代码编译之前对其进行一些文本性质的操作.它的主要任务包括删除注释.插入被#include指令包含的文件的内容.定义和 ...
- SVN版本控制—branches、trunk、tag篇
新建资源仓库时,可选择默认创建三个文件夹.这三个文件夹分别是[trunk][branches][tags] [Trunk] 一般用于存放目前项目主线,也就是项目所有功能模块的集合体,一整个项目所有代码 ...
- 透过字节码生成审视Java动态代理运作机制
对于动态代理我想应该大家都不陌生,就是可以动态去代理实现某个接口的类来干一些我们自己想要的功能,但是在字节码层面它的表现是如何的呢?既然目前刚好在研究字节码相关的东东,有必要对其从字节码角度来审视一下 ...