[CF1279D] Santa's Bot

[CF1279D] Santa's Bot - 概率

Description

给定 N 个集合,程序会等概率选出一个集合 A,在期中等概率选出一个元素 y,同时再等概率选出一个集合 B,求 y 属于 B 的概率。

Solution

统计每个元素在多少个集合里出现,再扫一遍所有元素算贡献

#include <bits/stdc++.h>
using namespace std;

#define int long long

const int mod = 998244353;

int qpow(int p, int q) { return (q & 1 ? p : 1) * (q ? qpow(p * p % mod, q / 2) : 1) % mod; }
int inv(int p) { return qpow(p, mod - 2); }

signed main()
{
    ios::sync_with_stdio(false);
    int n;
    cin >> n;
    map<int, int> mp;
    vector<vector<int>> a(n + 2);
    for (int i = 1; i <= n; i++)
    {
        int siz;
        cin >> siz;
        while (siz--)
        {
            int x;
            cin >> x;
            mp[x]++;
            a[i].push_back(x);
        }
    }
    int ans = 0;
    for (int i = 1; i <= n; i++)
    {
        int siz = a[i].size();
        for (int j : a[i])
            ans += mp[j] * inv(n) % mod * inv(n) % mod * inv(siz) % mod;
        ans %= mod;
    }

    cout << ans;
}
原文地址:https://www.cnblogs.com/mollnn/p/14419774.html