https://www.luogu.com.cn/problem/CF336D

#include<iostream>
#define int long long
using namespace std;
int n,m,g,u=1,v=1,ans;
const int p=1000000007;
int po(int a,int b){
	int res=1;
	while(b){
		if(b&1)res=res*a%p;
		b>>=1;
		a=a*a%p;
	}
	return res;
}
int inv(int t){return po(t,p-2);}
signed main(){
	cin>>n>>m>>g;
	if(m==0){
		cout<<((n&1)^g^1);
		return 0;
	}
	if(m==1){
		if(n&1){
			if(g)cout<<(n-1)/2;
			else cout<<(n+3)/2;
		}
		else {
			if(g)cout<<(n/2);
			else cout<<(n/2+1);
		}
		return 0;
	}
	for(int i=n+1;i<=m-1+n;++i)u=u*i%p;
	for(int i=1;i<=m-1;++i)v=v*i%p;
	if(g){
		u=u*n%p;
		v=v*(n+m-1)%p;
	}
	for(int i=g;i<=n;i+=2){
		ans=(ans+u*inv(v))%p;
		u=u*(n-i)%p;
		u=u*(n-i-1)%p;
		v=v*(n-i+m-1)%p;
		v=v*(n-i+m-2)%p;
	}
	cout<<ans<<endl;
}

n=4 m=0 g=1, 0 0 0 0 -》0 0 1-》0 0 -》1 而(n&1)^g^1=0

wa on test 4->wa on test 8

@yangshe

改成!g