这题很简单..
就是切分连通块.把a看成一个联通块,把b看成一个连通块.题目就是要你切k-2刀分成k块.然后由连通块的定义可知肯定是对半分,然后代码就是这样--(把ans放到外面调bug,服了
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int mod=1e9+7; ll qp(ll a,ll b, ll p){ll ans = 1;while(b){if(b&1){ans = (ans*a)%p;--b;}a = (a*a)%p;b >>= 1;}return ans%p;} ll Inv(ll x) { return qp(x,mod-2,mod);} ll C(ll n,ll m){if (m>n) return 0;ll ans = 1;for (int i = 1; i <= m; ++i) ans=ans*Inv(i)%mod*(n-i+1)%mod;return ans%mod;} int main() { int n,m,k;//n个a m个b 组成k_size ll ans=0; cin>>n>>m>>k; if(k>n+m||k==1) cout<<0<<endl; else { k-=2; ans=(ans+C(n-1,k/2)*C(m-1,k-k/2))%mod; ans=(ans+C(n-1,k-k/2)*C(m-1,k/2))%mod; cout<<ans<<endl; } return 0; }