@gzyqwq
2019-10-23T03:04:27.000000Z
字数 7679
阅读 465
我以后再也不写纸质整理报告了,纸上一直爽,一直纸上一直爽。
转载自dsr的https://www.cnblogs.com/dsrdsr/protected/p/11373538.html
当n趋于oo时候
期望的线性性。
前缀和技巧
对于离散变量。
有 个随机变量 ,每个随机变量都是从 中
随机一个整数,求 的期望
解:
概率为 的事件期望 次后发生
你:这不显然吗?我:…………
箱子里有 个球 ,你要从里面拿 次球,拿了后不放
回,求取出的数字之和的期望
解:
箱子里有 个球 ,你要从里面拿 次球,拿了后放
回,求取出的数字之和的期望
小学老师教过我们,放不放回他们的概率是相等的。
箱子里有 个球 ,你要从里面拿 次球,拿了后以
的概率放回,以 的概率放回两个和这个相同的球,
求取出的数字之和的期望
感性吧,我都忘了。
每个球都是相等的,所以每个球都有概率被选中,
都有同样的概率被放回去,也都有同样的概率放回两个.
所以选的概率都是
在一条 个点的链上游走,求从一端走到另一端的概率
表示走到的步数。
在一张 个点的完全图上游走,求从一个点走到另一个点的概率
每个点都是等价的,,所以期望就是n-1次成功。
在一张 个点的完全二分图上游走,求从一个点走到另一个点的概率
还是左边等价,右边等价。
A:同侧
B:异侧
4.在一张 个点的菊花图上游走,求从一个点走到另一个点的概率
A:根->叶
B:叶->根
C:叶->叶
在一棵 个点的树上游走,求从根走到 的期望步数
从i开始游走,走到的步数,为的度数
构造一张个点的无向图,使得上面从 走到 的随机游走期望步
数>=1000000
棒棒糖图: 1000个点构造一个完全图,然后里面找一个点连出一条链子。
这个期望步数差不多是
每次随机一个 的整数,问期望几次能凑齐所有数
一直选,直到出现没出现过的数字。
随机一个长度为 个排列 ,求 中 是最大的数的概率
,最大值有i个位置可以挑。
问满足上面那个题的 的个数的平方的期望
因为相互独立
随机一个长度为 的排列 ,求 在 的后面的概率
合法的位置可以颠倒过来嘛。
随机一个长度为 的排列 ,求它包含 作为子序列/连续子序列的概率
子序列:
乱排,剩下的m顺序不变,插入n中,从n中选出m个位置。
连续子序列:
不是一个个插入n中了,是找个缝全钻进去。
有 堆石头,第 堆个数为 ,每次随机选一个石头然后把那一整堆都扔了,求第 堆石头期望第几次被扔
看不懂
随机一个长度为 的串,每个位置是 的概率是 ,定义 是每段连续的 的长度的平方之和,求
连续1的最长长度。价值。
给一个序列,每次随机删除一个元素,问 和 在过程中相邻的概率
考虑交换x和i的位置,。
就是求len个数中,i,j(可颠倒)总是在后面的概率,
给定一棵树,将他的边随机一个顺序后依次插入,求 期望什么时候连通
u,v,路径上的边全连上才会联通,其他变雨我无瓜。
枚举第几次恰好联通
给 这 个数,每次随机选择一个还在的数并且删掉他的所有倍数,求期望几次删完
每次选一个还在的数删掉,然后标记他的倍数。
没标记前被删掉的期望。
给定 个硬币,第 个硬币的价值为 ,每次随机取走一个硬币,获得的
收益是左右两个硬币的价值的乘积,求期望总价值.
还是差不多的,
有 N 个数 a[1…N],每次等概率选出两个数,然后合并成?一个新的数放回
来,得到的收益是新的数的值,求总收益的期望
x_i为出现次数。
感觉这个可以拿出来
给定一个数列 ,随机一个排列 ,如果 比 和 都
大,就获得 的收益,求期望收益
给出一棵树,一开始每个点都是白的,每次选一个白点将他子树里所有点染
黑,求期望几次染黑整个树
在父亲被染黑之前才有贡献。
有 个黑球,个白球,每次等概率取出一个球(不放回),将取出来的球
的颜色写成一个序列,求 的期望出现次数
可能是错的过程:
在中,考虑第个数为,概率为
第为0的概率为
可能是正确的答案:
整得答案就是
f[i][j][0/1] 前i个人,用了j次机会,第i节课有没有申请过。
#include <bits/stdc++.h>#define FOR(i, a, b) for (int i = a; i <= b; ++i)const int _ = 2019;const double INF = 0x3f3f3f3f;using namespace std;int read() {int x = 0, f = 1;char s = getchar();for (; s>'9' || s<'0';s = getchar()) if (s == '-') f = -1;for (; s>='0' && s<='9'; s = getchar()) x = x * 10 + s - '0';return x * f;}int n, m, v, e, c[_], d[_], dis[_][_];double f[_][_][2], k[_];int main() {n = read(), m = read(), v = read(), e = read();FOR (i, 1, n) c[i] = read();FOR (i, 1, n) d[i] = read();FOR (i, 1, n) scanf("%lf", &k[i]);FOR (i, 1, v) FOR (j, 1, v) dis[i][j] = (i != j) * INF;FOR (i, 1, e) {int u = read(), v = read();dis[v][u] = dis[u][v] = min(dis[u][v], read());}FOR (k, 1, v) FOR (i, 1, v) FOR (j, 1, v)dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);FOR (i, 1, n) FOR (j, 0, m) f[i][j][0] = f[i][j][1] = INF;f[1][0][0] = 0, f[1][1][1] = 0;FOR (i, 2, n) {FOR (j, 0, m) {f[i][j][0] = min(f[i - 1][j][0] + 1.0 * dis[c[i - 1]][c[i]],f[i - 1][j][1] + k[i - 1] * dis[d[i - 1]][c[i]] + (1.0 - k[i - 1]) * dis[c[i - 1]][c[i]]);if(j) {f[i][j][1] = min(f[i - 1][j - 1][0] + k[i] * dis[c[i - 1]][d[i]] + (1 - k[i]) * dis[c[i - 1]][c[i]],f[i - 1][j - 1][1] + k[i] * k[i - 1] * dis[d[i - 1]][d[i]] + k[i] * (1 - k[i - 1]) * dis[c[i - 1]][d[i]] +(1 - k[i]) * k[i - 1] * dis[d[i - 1]][c[i]] + (1 - k[i]) * (1 - k[i - 1]) * dis[c[i - 1]][c[i]]);}}}double ans = INF;FOR (i, 0, m) ans = min(ans, min(f[n][i][0], f[n][i][1]));printf("%.2f\n", ans);return 0;}
给出一棵树,其中每条边的长度有 的概率是 ,的
概率是 ,求直径的期望
枚举这个,就叫他。
设表示i这颗子树内,从i到下最长的深度为j。
然后枚举和.
有 个球,一开始颜?色是 ,每次随机一对数 然
后 ,求让 全部相同的期望步数
每种颜色都是等价的
为有了i个目标颜色,还要期望走步全部变为x
俩都是x或者都不是x
x变为不是x
不是x变为x
给定一张个点的有向图,表示边集的拓扑序个
数,现在随机取一个边的子集,求的期望。
WTF,他在说啥。
权为1,求期望就是求概率。
前面ans和后面ans相等,期望的线性性拆开.
分开算。
#include <bits/stdc++.h>using namespace std;int n, a, A, B, C, first, las, now;double ans;int main() {scanf("%d%d%d%d%d",&n,&A,&B,&C,&first);las = first;for (int i = 2; i <= n; i++) {int now = (1LL * las * A + B) % 100000001;int x = las % C + 1, y = now % C + 1;ans += 1.0 * min(x, y) / x / y;las = now;}las = las % C + 1, first = first % C + 1;ans += 1.0 * min(las, first) / las / first;printf("%.3f\n", ans);return 0;}
给定一个长度为 的 串,每次随机一个区间将里面所有元素翻转
求 次操作后 的期望个数
被覆盖的概率为
所以每一位上的1都是等价的,0也一样。
考虑每一位的概率(即期望)。
矩阵快速幂维护一下就做完了。
我们定义一种随机区间的方法:
现在这样随机出两个区间,求他们相交的概率
为区间右端点的概率
f为g的前缀和,枚举靠右区间的端点
#include <bits/stdc++.h>using namespace std;const int _=1e6+7;int n;double g[_], f[_], ans;int main() {scanf("%d", &n);for (int i = 1; i <= n; ++i) {g[i] = g[i - 1] + 1.0 / n / (n - i + 1);f[i] = f[i - 1] + g[i];ans += f[i];}printf("%.8f\n", ans);return 0;}
我找到了,不过是个私密网站,真抠。
不过他们的凸包期望面积题解还是能看的
给 个点,随机选一个点集,求二维凸包的期望点数
保证没有三点共线
枚举两点。它为凸包上的线段当且仅当所有的点都在同侧.
期望为
复杂度
三维凸包也差不多,好想要用欧拉定理。
FOR(i,1,n) FOR(j,1,n) {if(i==j) continueint tmp=2*p[i]*p[j];FOR(k,1,n) {if(k==i||k==j) continueif(onleft(i,j,k)) tmp*=1-p[k];}ans+=tmp;}
一个游戏有 n 个人,规则是这样的:
1. 随机选择一个还没死的人,让他活着离开
2. 活着离开之前,他会向剩下所有人开一枪,有 的概率致死
重复以上步骤直到所有人要么死了要么离开了
求一个?人活着离开且一共被开了 枪的概率
表示剩下i个,已经开了j抢了。
这个男银勒了,
他是欧皇,