1. 程式人生 > >多校9 Rikka with Badminton(容斥原理)

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

今天開始和機油打比賽,開始做多校,真雞兒難,我太菜了。
這個題不是很難,開始就是沒想到。等臨走的那一週,開始做概率。
題目是 若 有至少2個球拍和至少一個球就滿足條件,求的是不滿足條件的情況數。
記事件A 為 來的人都沒有球。
事件B 為 來的人都沒有球拍。
事件C 為 來的人只有一個球拍。
以上就是構不成滿足條件的事件數,因為d這類人既有球也有球拍,所以A B C 之間不是獨立的。
有容斥定理地
ans = (A + B + C) - (AB + BC + AC) + (ABC)
求解即可

    #include<cstdio>
#include<iostream> 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; }

總結,建模時資訊構造“較慢”、“較低效”。沒有有效思考。
建議:做做概率和邏輯。