传送门

题意:

给你平面上两个向量,走到指定点,一些点不能经过,求方案数


煞笔提一开始被题面带偏了一直郁闷为什么方案不是无限

现在精简的题意.....不就是$bzoj3782$原题嘛,还不需要$Lucas$了....

因为这是平面向量啊

基本定理与唯一表示.....

小新上课强调了辣么多次......

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N=,M=1e6,P=1e9+;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int x,y,n,x1,y1,x2,y2;
struct Point{
int x,y;
bool operator <(const Point &r)const{return x<r.x || (x==r.x && y<r.y);}
}a[N];
int m;
bool solEqu(int x,int y,Point &p){//printf("solEqu %d %d\n",x,y);
int a=x*y1-y*x1,b=x2*y1-y2*x1;//printf("a b %d %d\n",a,b);
if(a%b) return ;else p.x=a/b;
a=x*y2-y*x2,b=x1*y2-y1*x2;//printf("a b %d %d\n",a,b);
if(a%b) return ;else p.y=a/b;//printf("Point %d %d\n",p.x,p.y);
return ;
}
ll inv[M],fac[M],facInv[M];
void ini(int n){
inv[]=;fac[]=facInv[]=;
for(int i=;i<=n;i++){
if(i!=) inv[i]=(P-P/i)*inv[P%i]%P;
fac[i]=fac[i-]*i%P;
facInv[i]=facInv[i-]*inv[i]%P;
}
}
inline ll C(int n,int m){return fac[n]*facInv[m]%P*facInv[n-m]%P;}
ll f[N];
inline void modify(ll &x){if(x<) x+=P;}
void dp(){
for(int i=;i<=m;i++){
f[i]=C(a[i].x+a[i].y,a[i].x);
for(int j=;j<i;j++) if(a[j].x<=a[i].x && a[j].y<=a[i].y)
modify(f[i]-=C(a[i].x-a[j].x+a[i].y-a[j].y , a[i].x-a[j].x) * f[j] %P);
}
}
int main(){
freopen("in","r",stdin);
ini();
x=read();y=read();n=read();
x1=read();y1=read();x2=read();y2=read();
if(!solEqu(x,y,a[++m])) {puts("");return ;}
for(int i=;i<=n;i++){
x=read();y=read();
if(!solEqu(x,y,a[++m]) || a[m].x>a[].x || a[m].y>a[].y) m--;
}
sort(a+,a++m);
dp();
printf("%lld",f[m]);
}

BZOJ 4767: 两双手 [DP 组合数]的更多相关文章

  1. bzoj 4767: 两双手 组合 容斥

    题目链接 bzoj4767: 两双手 题解 不共线向量构成一组基底 对于每个点\((X,Y)\)构成的向量拆分 也就是对于方程组 $Ax * x + Bx * y = X $ \(Ay * x + B ...

  2. BZOJ.4767.两双手(组合 容斥 DP)

    题目链接 \(Description\) 棋盘上\((0,0)\)处有一个棋子.棋子只有两种走法,分别对应向量\((A_x,A_y),(B_x,B_y)\).同时棋盘上有\(n\)个障碍点\((x_i ...

  3. bzoj 4767 两双手 - 动态规划 - 容斥原理

    题目传送门 传送门I 传送门II 题目大意 一个无限大的棋盘上有一只马,设马在某个时刻的位置为$(x, y)$, 每次移动可以将马移动到$(x + A_x, y + A_y)$或者$(x + B_x, ...

  4. BZOJ 4767 两双手

    题解: 发现这种题目虽然可以想出来,但磕磕碰碰得想挺久的 根据数学可以知道组成方案是唯一的(集合) 然后发现每个使用的大小可能是接近n^2的 直接dp(n^4)是过不了的 那么先观察观察 我们可以把每 ...

  5. 【BZOJ】4767: 两双手【组合数学】【容斥】【DP】

    4767: 两双手 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1057  Solved: 318[Submit][Status][Discuss] ...

  6. bzoj4767两双手 容斥+组合

    4767: 两双手 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 684  Solved: 208[Submit][Status][Discuss] ...

  7. BZOJ4767: 两双手【组合数学+容斥原理】

    Description 老W是个棋艺高超的棋手,他最喜欢的棋子是马,更具体地,他更加喜欢马所行走的方式.老W下棋时觉得无聊,便决定加强马所行走的方式,更具体地,他有两双手,其中一双手能让马从(u,v) ...

  8. 【BZOJ4767】两双手(动态规划,容斥)

    [BZOJ4767]两双手(动态规划,容斥) 题面 BZOJ 题解 发现走法只有两种,并且两维坐标都要走到对应的位置去. 显然对于每个确定的点,最多只有一种固定的跳跃次数能够到达这个点. 首先对于每个 ...

  9. noj 2033 一页书的书 [ dp + 组合数 ]

    传送门 一页书的书 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte总提交 : 53            测试通过 : 1 ...

随机推荐

  1. Linux使用Public Key方式远程登录

    一.前言: ssh远程登录密码认证的方式有三种,password.Keyboard Interactive.Public Key 前面两种方式就是密码认证,含义都是一样大同小异.第三种是登录方式最安全 ...

  2. 将简单的lambda表达式树转为对应的sqlwhere条件

    1.Lambda的介绍 园中已经有很多关于lambda的介绍了.简单来讲就是vs编译器给我带来的语法糖,本质来讲还是匿名函数.在开发中,lambda给我们带来了很多的简便.关于lambda的演变过程可 ...

  3. 科普:String hashCode 方法为什么选择数字31作为乘子

    1. 背景 某天,我在写代码的时候,无意中点开了 String hashCode 方法.然后大致看了一下 hashCode 的实现,发现并不是很复杂.但是我从源码中发现了一个奇怪的数字,也就是本文的主 ...

  4. [最直白版]一步一步教你用VMware Workstation12安装Ubuntu 16.04和VMware Tools的教程

    [最直白版]Win10下一步一步教你用 VMware Workstation12安装Ubuntu 16.04和VMware Tools的教程 安装过程中使用的软件(要保证电脑里面有下列三个东西): 1 ...

  5. phpmyadmin设置密码,不用登录直接进入

    版权声明:本文为博主原创文章,未经博主允许不得转载. 1.config.sample.inc.PHP改为config.inc.php 2.加入或更改代码: [php] view plain copy ...

  6. 使用WinDbg获取SSDT函数表对应的索引再计算得出地址

    当从Ring3进入Ring0的时候会将所需要的SSDT索引放入到寄存器EAX中去,所以我们这里通过EAX的内容得到函数在SSDT中的索引号,然后计算出它的地址首先打开WinDbug,我们以函数ZwQu ...

  7. linux_发邮件

    如何通过linux发邮件? 邮箱配置文件: /etc/mail.rc 1. 邮箱文件配置 vim /etc/mail.rc # 添加一下数据 set from=beimen@163.com smtp= ...

  8. python_如何定义带参数的装饰器?

    案例: 实现一个装饰器,用它来检查被装饰函数的参数类型. 需求: 装饰器可以通过函数,指明函数参数类型,进行函数调用的时候,传入参数,检测到不匹配时,抛出异常 如何解决这个问题? 先要获取函数的签名, ...

  9. 无废话XML--XML约束(schema)

    Schema  的由来 DTD 作为 XML 1.0 规范的重要组成部分, 对于 XML 文档的结构起到很好的描述作用. 但是,它也具有一些缺点,比如,它采用了非 XML 的语法规则.不支持数据类型. ...

  10. Unity 使用Plugins接入安卓SDK 基础篇

    一.须知 本帖适合对安卓一点基础都没有,有一定Unity基础.刚刚接完一个某文档很简单的渠道SDk,也当是自己总结一下. 二.Unity中的目录创建与理解. Plugins:插件目录,该目录再编译项目 ...