这题很简单..
就是切分连通块.把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;
}
京公网安备 11010502036488号