「JLOI2015」骗我呢 解题报告?

「JLOI2015」骗我呢

这什么神仙题

可以学到的东西

对越过直线的东西翻折进行容斥

之类的..吧?


Code:

#include <cstdio>
const int mod=1e9+7;
const int N=3e6+10;
inline int add(int a,int b){return a+b>=mod?a+b-mod:a+b;}
#define mul(a,b) (1ll*(a)*(b)%mod)
int qp(int d,int k){int f=1;while(k){if(k&1)f=mul(f,d);d=mul(d,d),k>>=1;}return f;}
int fac[N],inv[N],n,m;
int C(int m,int n){return mul(fac[m],mul(inv[m-n],inv[n]));}
int g(int,int);
int f(int,int);
int g(int x,int y){return (x<0||y<0)?0:add(C(x+y,x),mod-f(y-1,x+1));}
int f(int x,int y){return (x<0||y<0)?0:add(C(x+y,x),mod-g(y+2+m,x-2-m));}
int main()
{
	scanf("%d%d",&n,&m);
	fac[0]=1;for(int i=1;i<N;i++) fac[i]=mul(fac[i-1],i);
	inv[N-1]=qp(fac[N-1],mod-2);
	for(int i=N-2;~i;i--) inv[i]=mul(inv[i+1],i+1);
	printf("%d\n",add(C(m+2*n+1,n),add(mod-f(n-1,m+n+2),mod-g(m+n+2,n-1))));
	return 0;
}

2019.2.27

posted @ 2019-02-27 10:38  露迭月  阅读(279)  评论(0编辑  收藏  举报