这个题。。第一想法肯定是先走长的,再走短的 然后就完了
画一下图会发现
顺时针旋转45度,这是一个杨辉三角
之后求一下组合数就行了
当然。。蛋疼的BJ决定在颓废之前证明一下
证明之后成功颓废。。。所以才修仙写blog
(突然懒的写证明,想知道的话评论吧。。。来自一个无名博主)
回来写代码
莫名其妙一发RE一发WA
最后也不知道怎么调对的。。。
#include<cmath> #include<ctime> #include<cstdio> #include<cstring> #include<cstdlib> #include<complex> #include<iostream> #include<algorithm> #include<iomanip> #include<vector> #include<string> #include<bitset> #include<queue> #include<set> #include<map> using namespace std; typedef long long ll; inline ll read() { ll x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch<='9'&&ch>='0'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();} return x*f; } void print(ll x) {if(x<0)putchar('-'),x=-x;if(x>=10)print(x/10);putchar(x+'0');} const ll mod=1e9+7; ll qpow(ll a,ll b) {ll res=1;while(b){if(b&1)res=res*a%mod;a=a*a%mod;b>>=1;}return res;} int main() { ll n=read(),m=read(),i,tmp=1; if(n<m)swap(n,m);n%=mod; for(i=2;i<=m;++i)tmp=tmp*i%mod; tmp=qpow(tmp,mod-2); for(i=n+2;i<=n+m+1;++i)tmp=tmp*i%mod; print((n+tmp)%mod);puts(""); return 0; }
