题目链接

bzoj4767: 两双手

题解

不共线向量构成一组基底

对于每个点\((X,Y)\)构成的向量拆分

也就是对于方程组

$Ax * x + Bx * y = X \(
\)Ay * x + By * y = Y\(
\)x,y\(不能为负问题转化为NE lattice path
\)f(i)\(表示从0到i点不经过障碍的方案数
枚举第一个碰到的障碍点
\)f(i) = cnt(0,i) - \sum_j dp[j] cnt(j,i)$

\(cnt(x,y)\)为从点x到y的方案数

代码


#include<cstdio>
#include<algorithm>
#include<cstring>
#define gc getchar()
#define pc putchar
inline int read() {
int x = 0,f = 1;
char c = gc;
while(c < '0' || c > '9') {if(c == '-') f = -1 ; c = gc; }
while(c <= '9' && c >= '0') x = x * 10 + c - '0',c = gc;
return x * f;
}
void print(int x) {
if(x >= 10) print(x / 10);
pc(x % 10 + '0');
}
#define int long long
const int maxn = 507;
const int M = 500000;
const int mod = 1e9 + 7;
int Ex,Ey,n;
int Ax,Ay,Bx,By;
int f[maxn];
struct Node {
int x,y;
bool operator < (const Node a) const {
return x == a.x ? y < a.y : x < a.x;
}
} p[maxn];
int fac[M + 7],inv[M + 7];
inline int fstpow(int x,int k) {
int ret = 1;
for(;k;k >>= 1,x = 1ll * x * x % mod)
if(k & 1) ret = 1ll * ret * x % mod;
return ret;
}
inline void calc(int &x,int &y) {
int a1 = x * By - y * Bx,a2 = Ax * By - Ay * Bx;
int b1 = x * Ay - Ax * y,b2 = Bx * Ay - Ax * By;
if(!a2 || !b2) {x = y = -1;return; }
if((a1 % a2) || (b1 % b2)) {x = y = -1;return; }
x = a1 / a2,y = b1 / b2;
}
inline int C(int x,int y){
if(x < y) return 0;
return 1ll * fac[x] * inv[y] % mod * inv[x - y] % mod;
}
main() {
fac[0] = fac[1] = 1; for(int i = 1;i <= M;++ i) fac[i] = 1ll * fac[i - 1] * i % mod;
inv[0] = 1;
inv[M] = fstpow(fac[M],mod - 2); for(int i = M - 1;i >= 1;-- i) inv[i] = 1ll * inv[i + 1] * (i + 1) % mod; Ex = read(),Ey = read(),n = read();
Ax = read(),Ay = read(),Bx = read(),By = read(); calc(Ex,Ey); for(int i = 1;i <= n;++ i) {
p[i].x = read(),p[i].y = read();
calc(p[i].x,p[i].y);
if(p[i].x < 0 || p[i].y < 0 || p[i].x > Ex || p[i].y > Ey) n --,i --;
}
p[0].x = p[0].y = 0;
p[++ n].x = Ex,p[n].y = Ey; std::sort(p + 1,p + n + 1); for(int i = 1;i <= n;++ i) {
f[i] = C(p[i].x + p[i].y,p[i].x);
if(f[i] == 0) continue;
for(int j = 1;j < i;++ j) {
f[i] -= (1ll * f[j] * C(p[i].x - p[j].x + p[i].y - p[j].y,p[i].x - p[j].x)) % mod;
f[i] %= mod;
f[i] += mod ;
f[i] %= mod;
}
}
print(f[n]);
return 0;
}

bzoj 4767: 两双手 组合 容斥的更多相关文章

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

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

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

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

  3. BZOJ 4767 两双手

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

  4. BZOJ 4767: 两双手 [DP 组合数]

    传送门 题意: 给你平面上两个向量,走到指定点,一些点不能经过,求方案数 煞笔提一开始被题面带偏了一直郁闷为什么方案不是无限 现在精简的题意.....不就是$bzoj3782$原题嘛,还不需要$Luc ...

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

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

  6. [BZOJ 3129] [Sdoi2013] 方程 【容斥+组合数取模+中国剩余定理】

    题目链接:BZOJ - 3129 题目分析 使用隔板法的思想,如果没有任何限制条件,那么方案数就是 C(m - 1, n - 1). 如果有一个限制条件是 xi >= Ai ,那么我们就可以将 ...

  7. bzoj4710: [Jsoi2011]分特产 组合+容斥

    4710: [Jsoi2011]分特产 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 289  Solved: 198[Submit][Status] ...

  8. BZOJ.4558.[JLOI2016]方(计数 容斥)

    BZOJ 洛谷 图基本来自这儿. 看到这种计数问题考虑容斥.\(Ans=\) 没有限制的正方形个数 - 以\(i\)为顶点的正方形个数 + 以\(i,j\)为顶点的正方形个数 - 以\(i,j,k\) ...

  9. [BZOJ 3198] [Sdoi2013] spring 【容斥 + Hash】

    题目链接:BZOJ - 3198 题目分析 题目要求求出有多少对泉有恰好 k 个值相等. 我们用容斥来做. 枚举 2^6 种状态,某一位是 1 表示这一位相同,那么假设 1 的个数为 x . 答案就是 ...

随机推荐

  1. Jetson tx1 安装ROS

    注意,是 Jetson TX1 系统版本: R24.2 参考链接: https://www.youtube.com/watch?v=-So2P0kRYsk

  2. [转]GDB-----2.watchpoint

    TODO需要在ARM下验证 1. 前言 watchpoint,顾名思义,其一般用来观察某个变量/内存地址的状态(也可以是表达式),如可以监控该变量/内存值是否被程序读/写情况. 在gdb中可通过下面的 ...

  3. mysql之 innobackupex备份+binlog日志的完全恢复【转】

    前言: MySQL的完全恢复,我们可以借助于完整的 备份+binlog 来将数据库恢复到故障点. 备份可以是热备与逻辑备份(mysqldump),只要备份与binlog是完整的,都可以实现完全恢复. ...

  4. Windows 10 的一些快捷键

    Win键 + Q: 呼出[Cortana] Win键 + W:呼出[Windows INNK 工作区] Win键 + E: 呼出[资源管理器] Win键 + R: 呼出[运行] Win键 + A: 呼 ...

  5. zabbix系列(十)zabbix添加对zookeeper集群的监控

    1.应用场景描述 在目前公司的业务中,有部分ESB架构用ZooKeeper作为协同服务的场景,做好ZooKeeper的监控很重要. 2.ZooKeeper监控要点 系统监控 内存使用量    ZooK ...

  6. lvs持久连接及防火墙标记实现多端口绑定服务

    lvs持久连接及防火墙标记实现多端口绑定服务 LVS持久连接: PCC:将来自于同一个客户端发往VIP的所有请求统统定向至同一个RS: PPC:将来自于一个客户端发往某VIP的某端口的所有请求统统定向 ...

  7. centos7 部署 docker ce

    =============================================== 2019/4/9_第1次修改                       ccb_warlock === ...

  8. jquery之jsonp相关知识

    这里讲的不错,可以参考:链接 我自己的理解: 服务器为了保证数据的安全,同时也为了保证不被攻击, 凡是来服务器请求的url,域名必须和服务器一致,否则就是跨域请求 为了解决跨域问题,就出现了jsonp ...

  9. python抓取bing主页背景图片

    最初Python2写法: #!/usr/bin/env python # -*- coding:utf-8 -*- # -*- author:nancy -*- # python2抓取bing主页所有 ...

  10. PHP中的10个实用函数

    1.php_check_syntax 这个函数可以用来检查特定文件中的PHP语法是否正确. <?php $error_message = ""; $filename = &q ...