显然的特判 如果n+m<k 或者k=1 输出肯定是0

否则呢? 先按照ababab顺序,填充满k个,那么容易得到a和b剩余的个数分别为n-(k+1)/2、m-k/2

对于a来说,也就是在(k+1)/2个已经放好的a内,在放剩下的n-(k+1)/2,允许放的个数为0.
那这不就是隔板法吗,所以方案数就是图片说明
同理容易得到b的方案数图片说明
注意下、前面规定的放置顺序是ababab
那么我们也可以按照babababa顺序放置。。方法和上述一样也是分别进行隔板法然后相乘。
然后把两种的方案数相加即可。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
ll f[100005];
ll qpow(ll a,ll b){
    ll ans=1;
    while(b){
        if(b&1) ans=ans*a%mod;
        b>>=1;
        a=a*a%mod;
    }
    return ans;
}
int main(){

    ll n,m,k;cin>>n>>m>>k;
    if(n+m<k || k==1) cout<<0;
    else{
       f[0]=1;
        for(int i=1;i<=100000;i++) f[i]=f[i-1]*i%mod;
        ll ans=0;
        //ababa...
        if(n>=k/2+k%2 && m>=k/2) ans=f[n-1]*qpow(f[k/2+k%2-1]*f[n-k/2-k%2]%mod,mod-2)%mod*(f[m-1]*qpow(f[k/2-1]*f[m-k/2]%mod,mod-2)%mod);
        //bababab...
        if(m>=k/2+k%2 && n>=k/2) ans+=f[m-1]*qpow(f[k/2+k%2-1]*f[m-k/2-k%2]%mod,mod-2)%mod*(f[n-1]*qpow(f[k/2-1]*f[n-k/2]%mod,mod-2)%mod);
        cout<<ans%mod;
    }
    return 0;
}