Hounter

  这题是概率与期望,不是很熟,所以冲了两篇题解才来写总结。
  首先可以发现1猎人死的轮数是他之前死了的列人数加一。
  那么题目转化为求先于一号猎人死的猎人数的期望值。
  考虑这样一个事情,就是所有的情况都可以按照一对猎人来划分,就是划分为猎人\(a\)先死于猎人\(b\)与猎人\(b\)先死于猎人\(a\)
  所以\(i\)号猎人先死于1号猎人的概率是\(\frac{W_{i}}{W_{i}+W_{1}}\),贡献是一,所以直接求和即可。
  最后还要加一,因为是猎人数加一等于轮数。

Code
#include<bits/stdc++.h>
using namespace std;
namespace STD
{
	#define rr register 
	typedef long long ll;
	const int N=1e5+4;
	const int mod=998244353;
	int n;
	int w[N];
	int read()
	{
		rr int x_read=0,y_read=1;
		rr char c_read=getchar();
		while(c_read<'0'||c_read>'9')
		{
			if(c_read=='-') y_read=-1;
			c_read=getchar();
		}
		while(c_read<='9'&&c_read>='0')
		{
			x_read=(x_read<<3)+(x_read<<1)+(c_read^48);
			c_read=getchar();
		}
		return x_read*y_read;
	}
	ll qpow(ll base,ll exp)
	{
		ll ret=1ll;
		while(exp)
		{
			if(exp&1) ret=ret*base%mod;
			base=base*base%mod;
			exp>>=1;
		}
		return ret;
	}
};
using namespace STD;
int main()
{
	n=read();
	for(rr int i=1;i<=n;i++) w[i]=read();
	ll ans=0;
	for(rr int i=2;i<=n;i++)
		ans=(ans+qpow(1ll*w[1]+w[i],mod-2)*w[i]%mod)%mod;
	cout<<ans+1<<'\n';
}

  题解冲的是ZZ_zuozhe与401rk8的万分感谢。
2021-08-08 21:26:17 星期日

posted @ 2021-08-08 21:27  Geek_kay  阅读(79)  评论(0编辑  收藏  举报