1 条题解

  • 1
    @ 2022-8-18 13:19:28
    #include<iostream>
    using namespace std;
    const int P=1e9+7,N=3e6+10;
    int n,m,up,inv[N],jc[N],inj[N];
    int Calc(int x,int y) {return (x<0||y<0)?0:1ll*jc[x+y]*inj[x]%P*inj[y]%P;}
    void flip1(int &x,int &y) {swap(x,y);x--;y++;}
    void flip2(int &x,int &y) {swap(x,y);x+=m+2;y-=m+2;}
    void add(int &x,int y) {x+=y;if(x>=P) x-=P;}
    int main()
    {
    	cin>>n>>m;inv[0]=inv[1]=jc[0]=inj[0]=1;up=max(n,m)*3+1;
    	for(int i=2;i<=up;i++) inv[i]=(P-1ll*P/i*inv[P%i]%P)%P;
    	for(int i=1;i<=up;i++) jc[i]=1ll*jc[i-1]*i%P,inj[i]=1ll*inj[i-1]*inv[i]%P;
    	int x=n+m+1,y=n,ans=Calc(x,y);
    	while(x>=0&&y>=0)
    	{
    		flip1(x,y);add(ans,P-Calc(x,y));
    		flip2(x,y);add(ans,Calc(x,y));
    	}
    	x=n+m+1,y=n;
    	while(x>=0&&y>=0)
    	{
    		flip2(x,y);add(ans,P-Calc(x,y));
    		flip1(x,y);add(ans,Calc(x,y));
    	}
    	return cout<<ans<<endl,0;
    }
    
    • 1

    信息

    ID
    2202
    时间
    1000ms
    内存
    125MiB
    难度
    6
    标签
    递交数
    1
    已通过
    1
    上传者