前言
传送门 :
思路
我们将这个图,分成两个矩形
设我们在上面放了 i i i个车
我们考虑先选择行再选择列,因此对于行有 C b i C_{b}^i Cbi
对于列有 A a i A_a^i Aai , 因此上面的选择的总方案数就是 C b i ∗ A a i C_b^i*A_a^i Cbi∗Aai
因此对于下半我们还需要选择 k − i k-i k−i 个车
同理对于行有 C d k − i C_d^{k-i} Cdk−i
对于列考虑,因为上面已经选择了列,所以列的考虑就是 A a + c − i k − i A_{a+c-i}^{k-i} Aa+c−ik−i
所以下面的总方案数就是 C d k − i ∗ A a + c − i k − i C_d^{k-i}*A_{a+c-i}^{k-i} Cdk−i∗Aa+c−ik−i
Mycode
map<int,int> mp;
const int N = 2010,mod = 1e5+3;
int fact[N],infact[N];
int qmi(int a,int k){
int res = 1;
while(k){
if(k&1) res = 1ll*res*a%mod;
a = 1ll*a*a%mod;
k>>=1;
}
return res;
}
int C(int a,int b){
if(a<b)return 0;
return 1ll*fact[a]*infact[a-b]%mod*infact[b]%mod;
}
int P(int a,int b){
if(a<b)return 0;
return 1ll*fact[a]*infact[a-b]%mod;
}
void solve(){
infact[0] = fact[0] = 1;
for(int i=1;i<N; i ++ ){
fact[i] = 1ll*fact[i-1]*i%mod;
infact[i] = 1ll*infact[i-1]*qmi(i,mod-2)%mod;
}
int a,b,c,d,k;
cin>>a>>b>>c>>d>>k;
int res = 0 ;
for(int i =0 ; i<= k ; i ++ ){
res = (res +1ll*C(b,i)*P(a,i)%mod*C(d,k-i)%mod*P(a+c-i,k-i))%mod;
}
cout<<res<<endl;
}