首页 > 其他分享 >Educational Codeforces Round 109 (Rated for Div. 2) E. Assimilation IV(期望的线性性质)

Educational Codeforces Round 109 (Rated for Div. 2) E. Assimilation IV(期望的线性性质)

时间:2022-11-11 22:23:06浏览次数:51  
标签:Educational Rated 期望 覆盖 int Codeforces 概率 ans Sigma

题意是有 n 个城市和 m 个点,已知每个城市到每个点的距离为\(a_{ij}\),每秒进行一次操作,每次随机选一个没选过的城市建一个碑,其影响的范围每秒加一,求 n 秒后被影响的点数的期望。

朴素的想法是\(n!\)枚举建碑的方案,然后暴力判断每种方案能覆盖多少点,但n最大为20,枚举阶乘显然会t。这时就要用到概率题目的常见思想:转变所求目标。既然方案不好考虑,那么就考虑点。我们要求的期望实际上是\(E(\Sigma_{i=1}^mI(i))\),其中\(I(x)\)是指示函数,由期望的线性性质,\(E(\Sigma_{i=1}^mI(i))=\Sigma_{i=1}^mE(I(i))=\Sigma_{i=1}^mp(i)\),\(p(i)\)即这个点被覆盖的概率。因为每种建碑方案会将点与点之间联系起来,因此使用线性性质可以将问题转化为单独求每个点的概率。因为每个点可能会被重复覆盖,所以将每个点被覆盖的概率转化为1-不被覆盖的概率。设当前考虑的点为i,将n个碑到i的距离从小到大排序。设最近的那个碑到当前点的距离为d[0],那么需要把它放到后d[0]-1个位置中的某个位置(这样才能保证这个碑永远不会覆盖到当前点);次近的碑需要放到后d[1]-1-1个位置(为什么d[1]-1以后还要再减1?因为按照距离排序后,前一个碑肯定已经在后d[1]-1个位置中占据一个了)...由乘法原理,可得当前点不被覆盖的概率为\(\frac{1}{n!}\Pi_{i=0}^{n-1}max(0, d[i]-1-i)\),和0取max是因为如果减为负数说明当前点无论如何都会被覆盖。\(1-\frac{1}{n!}\Pi_{i=0}^{n-1}max(0, d[i]-1-i)\)就是当前点被覆盖的概率。对所有的点求概率,相加即为答案。

#include <bits/stdc++.h>
#define int long long
#define mod 998244353
using namespace std;
int n, m;
int d[25][50005];
int fpow(int a, int b) {
	int ans = 1;
	for(; b; b >>= 1) {
		if(b & 1) ans = ans * a % mod;
		a = a * a % mod;
	}
	return ans;
}
void solve() {
	cin >> n >> m;
	int inv = 1;
	for(int i = 1; i <= n; i++) {
		inv = inv * fpow(i, mod - 2) % mod;
	}
	for(int i = 1; i <= n; i++) {
		for(int j = 1; j <= m; j++) {
			cin >> d[i][j];
		}
	}
	int ans = 0;
	for(int i = 1; i <= m; i++) {
		vector<int> v;
		for(int j = 1; j <= n; j++) {
			v.push_back(d[j][i]);
		}
		sort(v.begin(), v.end());
		int tmp = 1;
		for(int j = 0; j < v.size(); j++) {
			tmp = tmp * max(0ll, v[j] - 1 - j) % mod;
		}
		tmp = tmp * inv % mod;
		tmp = (1 - tmp + mod) % mod;
		ans = (ans + tmp) % mod;
	}
	cout << ans << endl;
}
signed main() {
	int T = 1;
	while(T--) {
		solve();
	}

}

标签:Educational,Rated,期望,覆盖,int,Codeforces,概率,ans,Sigma
From: https://www.cnblogs.com/lipoicyclic/p/16882196.html

相关文章

  • Codeforces Round #688 (Div. 2) D
    D.Checkpoints对于单独的一个1我们知道他的贡献为211呢贡献值为4101贡献值为81001贡献值为16然后二进制拼凑就可以了对于有奇数的显然-1voidsolve(){int......
  • Codeforces Round #695 (Div. 2) C
    C.ThreeBags我们发现这个题无非就是找一个最小的吸收了其他两组的数再回报过去但是自己组的只有两种选择要吗直接负汇报过去要吗就又要牺牲另一组的最小的一个数吸......
  • CodeForces - 1156D 0-1-Tree
    题意:给出一棵树,树的边权只有0和1。求有多少有序点对,其最短路径上每条权值为0的边不紧跟在权值为1的边后面。解:合法路径如下所示:000000 111111 000111 随便找个结点为......
  • Codeforces Round #697 (Div. 3) F
    F.UnusualMatrix这种题两种操作就相当于那种差分后再总体减的那种我们考虑先只进行一种操作比如说是行我们对于每一行应该只有可能经过0/1次变换都变成一摸一样的......
  • Codeforces Round #642 (Div. 3) E
    E.K-periodicGarland对于一个序列显然我们只有%m相同的位置上才能放置1不然肯定不合法所以我们把他分成m个部分记录一下总和然后转化一下题意发现他就是一个然......
  • Little Girl and Maximum Sum CodeForces - 276C - 差分
    给定一个数列\(a={a_1,a_2,...,a_n}\)以及\(q\)次查询。其中第\(i\)次查询如同:\(l_i,r_i\),意指求\(\sum_{j=l_i}^{r_i}{a_j}\)。但是查询前可以对数列任意排......
  • 「题解」Codeforces 1098D Eels
    暴力是,每次挑出最小的两个合并。需要观察到没有产生贡献的次数很小。考虑最小的那个数的大小,如果一次合并没有产生贡献,那么最小的数至少\(\times2\).所以最多会有\(\mat......
  • Codeforces Round #697 (Div. 3) G
    G.StrangeBeauty观察性质我们发现他就是一个单向的关系要是我们3能被9整除那我们来一个能整除9的那么一定能整除3就是这个性质我们考虑dpdp[i]表示我们以a[i]结......
  • CCF-A(KDD'22)FedMSplit: Correlation-Adaptive Federated Multi-Task Learning across
    JiayiChenandAidongZhang.2022.FedMSplit:Correlation-AdaptiveFederatedMulti-TaskLearningacrossMultimodalSplitNetworks.InProceedingsofthe28thA......
  • CodeForces - 708C Centroids
    题意:给出一棵有n个结点的树,对于每一个结点,如果任意删除一条边后再任意添加一条边能使这个结点成为这棵树的重心,则输出1;反之输出0。解:重心的特点:以重心为根节点时,其最大子......