多校9 Rikka with Badminton(容斥原理)
阿新 • • 發佈:2019-02-05
今天開始和機油打比賽,開始做多校,真雞兒難,我太菜了。
這個題不是很難,開始就是沒想到。等臨走的那一週,開始做概率。
題目是 若 有至少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;
}
總結,建模時資訊構造“較慢”、“較低效”。沒有有效思考。
建議:做做概率和邏輯。