Atcoder AtCoder Beginner Contest 297
F - Minimum Bounding Box 2
- 题意:在
N
∗
M
N*M
N∗M的棋盘上随机选
K
K
K个点,求包围这K个点最小矩形的面积期望
- 主要思路: 容斥,枚举四条边上哪一个边没有点
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+10;
typedef long long LL;
const LL mod = 998244353;
LL fac[maxn],ifac[maxn];
LL qpow(LL a,LL b) {
LL s = 1;
while(b > 0 ) {
if(b & 1) s = s*a%mod;
a = a*a%mod;
b >>= 1;
}
return s;
}
void init() {
int N = maxn-1;
fac[0] = 1;
for(int i = 1;i <= N; ++i) {
fac[i] = fac[i-1]*i%mod;
}
ifac[N] = qpow(fac[N],mod-2);
for(int i = N-1;i >= 0; --i) {
ifac[i] = ifac[i+1]*(i+1)%mod;
}
}
LL C(LL M,LL N) {
if(M < N) return 0;
return fac[M]*ifac[N]%mod*ifac[M-N]%mod;
}
int M,N,K;
int main(void) {
init();
cin>>M>>N>>K;
LL ans = 0;
for(int i = 1;i <= N; ++i) {
for(int j = 1;j <= M; ++j) {
LL t = 0;
for(int k = 0;k < (1<<4); ++k) {
int u = i,v = j;
if(k&1) u--;
if(k>>1&1) u--;
if(k>>2&1) v--;
if(k>>3&1) v--;
if(u < 0 || v < 0 ) continue;
if(__builtin_popcount(k)%2==0) (t += C(u*v,K))%=mod;
else (t -= C(u*v,K))%=mod;
}
(ans += i*j%mod*(N-i+1)*(M-j+1)%mod*t%mod)%=mod;
}
}
cout<<(ans*qpow(C(M*N,K),mod-2)%mod+mod)%mod<<endl;
}
G - Constrained Nim 2
- 题意:NIM的变形
- 主要思路:SG定理变形,请看博客 博弈论
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5+10;
int ar[maxn];
int dp[maxn];
int main(void) {
int N,L,R;
cin>>N>>L>>R;
int t = 0;
for(int i = 1;i <= N; ++i) {
cin>>ar[i];
t ^= (ar[i]%(L+R))/L;
}
if(t != 0)
cout<<"First"<<endl;
else
cout<<"Second"<<endl;
return 0;
}