首页 > 其他分享 >【luogu P6130】随机红包(数学)(期望)

【luogu P6130】随机红包(数学)(期望)

时间:2022-10-26 12:01:20浏览次数:100  
标签:红包 min int luogu mo invs dfrac P6130 inv

随机红包

题目链接:luogu P6130

题目大意

把一个数 1 分成 n 份,求第 k 小的期望大小,多次询问。

思路

首先考虑最小的期望大小,那假设最小的是 \(x\),剩下的都大于 \(x\)。
那我们把剩下的都减去 \(x\),就相当于在 \(1-nx\) 的长度上分成 \(n-1\) 份。
那我们有:\(P(L_{\min}\geqslant x)=(1-nx)^{n-1}\)
那期望就是把它积分一下:
\(E(L_{min})=\int_0^{\frac{1}{n}}P(L_{min}\geqslant x)dx\)
\(=\int_0^{\frac{1}{n}}(1-nx)^{n-1}dx\)
\(=\frac{1}{n}\int_0^{1}(1-x)^{n-1}dx\)
\(=\frac{1}{n}\int_0^1 x^{n-1}dx\)(换元一下,\(x\rightarrow n-x\))
\(=\dfrac{1}{n^2}\)

然后考虑求第二小。
那就是类似的想法,把 \(1\) 减去 \(nx\),然后里面 \(n-1\) 个选最小。
那就是:\(E(L_{\min})+\dfrac{1-nE(L_{\min})}{(n-1)^2}\)
化简可以得到的是:\(\dfrac{1}{n}(\dfrac{1}{n}+\dfrac{1}{n-1})\)

然后第三小同样的方法:
\(E(L_{2})+\dfrac{1-nE(L_{\min})-(n-1)(E(L_2)-E(L_{\min}))}{(n-2)^2}=\dfrac{1}{n}(\dfrac{1}{n}+\dfrac{1}{n-1}+\dfrac{1}{n-2})\)

找规律或者推一推式子都会发现第 \(k\) 小的答案是:
\(\dfrac{1}{n}\sum\limits_{i=1}^k\dfrac{1}{n-i+1}\)

然后直接预处理 \(\dfrac{1}{x}\) 前缀和就可以快速 \(O(1)\) 回答了。

代码

#include<cstdio>
#define mo 998244353

using namespace std;

const int N = 1e7 + 1000;
int n, k, jc[N], inv[N], invs[N], ans;

int add(int x, int y) {return x + y >= mo ? x + y - mo : x + y;}
int dec(int x, int y) {return x < y ? x - y + mo : x - y;}
int mul(int x, int y) {return 1ll * x * y % mo;}

int sum(int l, int r) {
	if (!l) return invs[r];
	return dec(invs[r], invs[l - 1]);
}

void work() {
	scanf("%d %d", &n, &k);
	ans ^= mul(inv[n], sum(n - k + 1, n));
}

int main() {
	jc[0] = 1; for (int i = 1; i < N; i++) jc[i] = mul(jc[i - 1], i);
	inv[0] = inv[1] = 1; for (int i = 2; i < N; i++) inv[i] = mul(inv[mo % i], mo - mo / i);
	invs[0] = 1; for (int i = 1; i < N; i++) invs[i] = add(invs[i - 1], inv[i]);
	
	int T; scanf("%d", &T);
	while (T--) work();
	printf("%d", ans);
	
	return 0;
}

标签:红包,min,int,luogu,mo,invs,dfrac,P6130,inv
From: https://www.cnblogs.com/Sakura-TJH/p/luogu_P6130.html

相关文章

  • Luogu 2894 酒店Hotel
    题目链接:​​传送门​​题目描述:参考样例,第一行输入n(1≤n≤50,000),m(1≤M<50,000),n代表有n个房间,编号为1—n,开始都为空房,m表示以下有m行操作,以下每行先输入一个......
  • Luogu 3478 [POI2008]STA-Station
    题目链接:​​传送门​​题目描述给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大输入样例814564567682434输出样例7一句话题意好......
  • Luogu 1507 NASA的食物计划
    题目链接:​​传送门​​题目背景NASA(美国航空航天局)因为航天飞机的隔热瓦等其他安全技术问题一直大伤脑筋,因此在各方压力下终止了航天飞机的历史,但是此类事情会不会在以......
  • Luogu 1853 投资的最大效益
    题目链接:​​传送门​​题目背景约翰先生获得了一大笔遗产,他暂时还用不上这一笔钱,他决定进行投资以获得更大的效益。银行工作人员向他提供了多种债券,每一种债券都能在固定的......
  • Luogu 1833 樱花
    题目链接:​​传送门​​题目背景《爱与愁的故事第四弹·plant》第一章。题目描述爱与愁大神后院里种了n棵樱花树,每棵都有美学值Ci。爱与愁大神在每天上学前都会来赏花。爱与......
  • Luogu 2014 选课
    题目链接:​​传送门​​题目描述在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程......
  • Luogu P4171 [JSOI2010]满汉全席
    题目链接:​​传送门​​2-sat板子题注意输入的时候可不要以为w和h后面数字只有一位*/#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#includ......
  • Luogu P4915 帕秋莉的魔导书
    题目链接:​​传送门​​动态开点是真的麻烦跟普通线段树差别还是挺大的题意就是区间前缀和的和除以区间长度#include<iostream>#include<cstdio>#include<cstring>#inc......
  • Luogu P4868 Preprefix sum
    题目链接:​​传送门​​线段树维护前缀和简单明了修改就修改当然还有更快的树状数组差分的做法*/#include<iostream>#include<cstdio>#include<cstring>#include<cs......
  • Luogu P4514 上帝造题的七分钟
    题目链接:​​传送门​​二维树状数组区间加区间求和烦人的输入#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<complex>#include<......