Codeforces 1279D Santa's Bot(逆元+概率计算)
题目链接:
Codeforces 1279D Santa’s Bot
思路:
设一共个小朋友,对于第个礼物,能送给想要的小朋友的概率为,分之一的求和是该礼物所在的那些的倒数求和,是该礼物出现的次数;
最后再将所有礼物计算出来的概率相加即可;
所有分母直接用它的逆元代换计算;
代码:
#include<bits/stdc++.h>
#define rp(i,n) for(int i=0;i<n;i++)
#define rpn(i,n) for(int i=1;i<=n;i++)
using namespace std;
typedef long long ll;
const ll mod=998244353;
ll powmod(ll a,ll b){ll res=1;a%=mod;for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
#define inv(a) powmod(a,mod-2)
//init
const int maxn=1e6+5;
ll cnt[maxn],sum[maxn];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n; cin>>n;
rp(i,n){
int k; cin>>k;
rp(j,k){
ll x; cin>>x; cnt[x]++;
sum[x]=(sum[x]+inv(k))%mod;
}
}
ll ans=0;
rp(i,maxn) ans=(ans+cnt[i]*sum[i]%mod)%mod;
cout<<ans*inv(n)%mod*inv(n)%mod;
return 0;
}