acm-(期望)Educational Codeforces Round 95 (Rated for Div. 2) E. Expected Damage

题面
传送门
本题考查对于期望的理解。期望一般由两种求法,一种是计算总贡献,然后除以总状态数,本题中总状态数是 n ! n! n!,不过总贡献会非常难求。第二种则是利用一些对称性,然后直接计算某个贡献产生的概率。

本题采用第二种方法,我们考虑对于 d d d而言,假设有 D D D个值满足大于等于 b b b,设这些值为有用值,其它为无用值,那么对于 d d d中第 a a a个有用值后的任意值都会对期望产生贡献,而小于等于第 a a a个有用值之前的数产生的贡献都为0。首先考虑有用值对期望的贡献,由于每个有用值出现在第 a a a个有用值之后的概率是相同的,考虑到有 D D D个有用值,故期望贡献为 D − a D ⋅ d i \frac{D-a}D\cdot d_i DDadi(假设这个有用值是 d i d_i di)。然后考虑无用值,这些值必须出现在第 a a a个有用值之后才会产生贡献,仍然利用对称性,每个无用值出现在第 i i i个有用值之后的概率都是相同的,考虑到有 D + 1 D+1 D+1个空隙(两个相邻有用值之间的区域)可选,又必须出现在第 a a a个空隙之后,故期望贡献为(假设这个无用值为 d i d_i di) D + 1 − a D + 1 d i \frac{D+1-a}{D+1}d_i D+1D+1adi

最后化解下式子,利用前缀和搞一下即可。

int n,m,d[maxn];
int sum[maxn];
int main(){
	n=rd(),m=rd();
	FOR(i,1,n+1)d[i]=rd();
	sort(d+1,d+1+n);
	FOR(i,1,n+1){
		sum[i]=(sum[i-1]+d[i])%mod;
	}
	FOR(i,1,m+1){
		int a=rd(),b=rd();
		int x=lower_bound(d+1,d+1+n,b)-d;
		int D=n-x+1;
		if(D<a)wrn(0);
		else{
			int ans=0;
			ans=(1ll-1ll*a*qpow(D,mod-2,mod)%mod)*(sum[n]-sum[x-1])%mod;
			ans=(1ll*ans+(1ll-1ll*a*qpow(D+1,mod-2,mod)%mod)*sum[x-1]%mod)%mod;
			ans=(ans%mod+mod)%mod;
			wrn(ans);
		}
	}
	
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值