多校9 Rikka with Badminton(容斥原理)

今天开始和机油打比赛,开始做多校,真鸡儿难,我太菜了。
这个题不是很难,开始就是没想到。等临走的那一周,开始做概率。
题目是 若 有至少2个球拍和至少一个球就满足条件,求的是不满足条件的情况数。
记事件A 为 来的人都没有球。
事件B 为 来的人都没有球拍。
事件C 为 来的人只有一个球拍。
以上就是构不成满足条件的事件数,因为d这类人既有球也有球拍,所以A B C 之间不是独立的。
有容斥定理地
ans = (A + B + C) - (AB + BC + AC) + (ABC)
求解即可

    #include
    #include
    using namespace std;
    typedef long long LL;
    const int MOD = 998244353;
    LL pow(LL a,LL b)
    {
        LL ans = 1;
        a = a % MOD;
        while(b)
        {
            if(b&1) ans = (ans  * a ) % MOD;
            a = (a % MOD * a % MOD) % MOD;
            b >>= 1;
        }
        return ans;
    }
    int main()
    {
        LL a,b,c,d;
        int T; cin >> T;
        while(T--)
        {
            cin >> a >> b >> c >> d;
            LL k1 = ((b + d + 1) * pow(2,a+c)) % MOD;
            LL k2 = pow(2,a + b);
            LL k3 = (b + 1) * pow(2,a);
            LL ans = ((k1 % MOD + k2 % MOD - k3 % MOD) + MOD) % MOD; // 同余定理用减法时注意 补正。
            cout << ans << endl;
        }
        return 0;
    }

总结,建模时信息构造“较慢”、“较低效”。没有有效思考。
建议:做做概率和逻辑。

你可能感兴趣的:(容斥原理)