题目链接:洛谷

作为一只沉迷数学多年的蒟蒻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来做了。

最新文章

  1. Springl利用Aspectj的扩展实现Aop
  2. 你买了多少ERP?
  3. 程设大作业xjb写——魔方复原
  4. hasLayout与BFC的触发条件
  5. Request Tracker 4.0.13 发布
  6. P1091 合唱队形
  7. 用DataBaseMail发图片并茂的邮件
  8. PCA MATLAB
  9. [转] web.xml文件详解
  10. R与数据分析旧笔记(十六) 基于密度的方法:DBSCAN
  11. csdn 博客,你很努力,有人帮你-2015年03一个月17日本
  12. angular.js的ng-app 指令定义一个 AngularJS 应用程序。
  13. 【剑指offer】扑克牌的顺子
  14. (精选)Xcode极速代码,征服Xcode,xcode插件
  15. echarts中提示框的样式调整
  16. Desktop Central 的移动设备管理功能
  17. Hibernate入门(十二)离线条件检索
  18. Linux下C与Mysql的混合编程(转)
  19. 机器学习入门-数值特征-进行二值化变化 1.Binarizer(进行数据的二值化操作)
  20. ASP.NET MVC中实现属性和属性值的组合,即笛卡尔乘积01, 在控制台实现

热门文章

  1. s5p6818裸机程序的设计:以GPIO为例
  2. 设计Qt风格的C++API
  3. Bloom过滤器
  4. Java InsertionSort
  5. 雷达无线电系列(二)经典CFAR算法图文解析与实现(matlab)
  6. 解决 Linux grep 不高亮显示
  7. MySql外网不能访问设置
  8. ASP.NET WEB应用程序(.network4.5)MVC 工作原理
  9. VBA比较运算符
  10. vue 2.0 + 如何实现加入购物车,小球飞入的动画