[BZOJ Contest-2017省队十连测推广赛1·T3][BZOJ4767][DP][容斥原理]两双手
来源:互联网 发布:域名交易平台php源码 编辑:程序博客网 时间:2024/05/03 17:55
这题跟BZOJ3782 上学路径思路一样。
但是这道题的图不是网格图,这个时候就要重建一下图,首先我们发现,从起点走到一个点用的A走法和B走法的次数是固定的,假设A走法用了x次,B走法用了y次,那么可以列一个方程组:
这样就可以求出从起点到
#include <cstdio>#include <iostream>#include <algorithm>#define N 1000010#define p 1000000007using namespace std;typedef pair<int,int> pairs;typedef long long ll;int n,Ex,Ey,a1,a2,b1,b2,cnt;ll f[N],fac[N],inv[N];struct node{ int x,y; friend bool operator <(node a,node b){ return a.x<b.x||(a.x==b.x&&a.y<b.y); }}w[N];#define Nosol pairs(-1,-1)inline pairs solve_eq(int A,int B){ if((B*b1-A*b2)%(a2*b1-a1*b2)) return Nosol; int x=(B*b1-A*b2)/(a2*b1-a1*b2); if((B*a1-A*a2)%(a1*b2-a2*b1)) return Nosol; int y=(B*a1-A*a2)/(a1*b2-a2*b1); if(x<0||y<0) return Nosol; return pairs(x,y);}inline ll C(int x,int y){ return fac[x]*inv[y]%p*inv[x-y]%p;}inline ll Get(int a,int b){ int A=w[b].x-w[a].x,B=w[b].y-w[a].y; if(A<0||B<0) return 0; return C(A+B,A);}int main(){ scanf("%d%d%d",&Ex,&Ey,&n); scanf("%d%d%d%d",&a1,&a2,&b1,&b2); pairs A=solve_eq(Ex,Ey); if(A==Nosol) return puts("0"),0; w[++cnt].x=A.first; w[cnt].y=A.second; for(int i=1,x,y;i<=n;i++){ scanf("%d %d",&x,&y); pairs A=solve_eq(x,y); if(A!=Nosol&&A.first<=w[1].x&&A.second<=w[1].y) w[++cnt].x=A.first,w[cnt].y=A.second; } fac[0]=fac[1]=inv[0]=inv[1]=1; for(ll i=2;i<=600000;i++) fac[i]=fac[i-1]*i%p; for(ll i=2;i<=600000;i++) inv[i]=1ll*(p-p/i)*inv[p%i]%p; for(int i=2;i<=600000;i++) inv[i]=inv[i]*inv[i-1]%p; sort(w+1,w+1+cnt); for(int i=1;i<=cnt;i++){ f[i]=C(w[i].x+w[i].y,w[i].x); for(int j=1;j<i;j++) f[i]=((f[i]-f[j]*Get(j,i))%p+p)%p; } printf("%lld\n",f[cnt]); return 0;}
0 0
- [BZOJ Contest-2017省队十连测推广赛1·T3][BZOJ4767][DP][容斥原理]两双手
- [容斥原理 DP] BZOJ 4767 两双手
- [BZOJ Contest-2017省队十连测推广赛2·T3][BZOJ4256][DP][Tarjan]推箱子
- bzoj4767: 两双手
- [BZOJ Contest-2017省队十连测推广赛1·T1][BZOJ4765][分块][dfs序]普通计算姬
- bzoj 3812 状压dp 容斥原理
- bzoj 2669 状压dp 容斥原理
- bzoj 1042(dp+容斥原理)
- BZOJ 1042 [DP][容斥原理]
- BZOJ 4710 容斥原理+dp
- [BZOJ Contest-2017省队十连测推广赛1·T2][BZOJ4766][完全二分图的生成树个数]文艺计算姬
- [BZOJ Contest-2017省队十连测推广赛2·T2][BZOJ4771][主席树][dfs序]七彩树
- HDU 5731 2016多校Contest 1 F题【轮廓线DP+容斥原理】
- BZOJ 3812 主旋律 状压DP+容斥原理
- BZOJ 1042(简单DP+容斥原理)
- 【bzoj 1042】 [HAOI2008] 硬币购物(dp+容斥原理)
- bzoj 4710: [Jsoi2011]分特产 (容斥原理+DP)
- bzoj 3812: 主旋律(容斥原理+DP)
- javaDateFormat
- mongodb3.4-java
- 16蓝桥杯基础—特殊的数字
- TeamViewer远程控制
- 手机软件广告设计
- [BZOJ Contest-2017省队十连测推广赛1·T3][BZOJ4767][DP][容斥原理]两双手
- VC6.0中,创建、调用 dll
- 利用Spring AOP处理自定义注解
- 笔记:xml
- 机器学习方法
- linux 作业管理
- AR-虚实融合文献阅读整理(一)
- 第一个python代码
- Android Studio 升级之更新包升级版本