链接:

https://www.nowcoder.com/acm/contest/139/A

题意:

求满足以下条件的n*m矩阵A的数量模(1e9+7):
A(i,j) ∈ {0,1,2}, 1≤i≤n, 1≤j≤m.
A(i,j) ≤ A(i+1,j), 1≤i<n, 1≤j≤m.
A(i,j) ≤ A(i,j+1), 1≤i≤n, 1≤j<m.
其中1 ≤ n,m ≤ 1e3。

分析:

考虑01和12的分界线,
是(n,0)到(0,m)的两条不相交(可重合)路径。
平移其中一条变成(n+1,1)到(1,m+1),
变成(n,0)到(0,m)、(n+1,1)到(1,m+1)的严格不相交路径。
套Lindström–Gessel–Viennot lemma,
答案是C(n+m,n) * C(n+m,n) - C(n+m,n+1) * C(n+m,n-1)。

Lindström–Gessel–Viennot lemma简介:

求a1到b1, a2到b2, ..., an到bn的严格不相交路径种数。

计算以上矩阵的行列式即可,其中e(a,b)是从a到b的方法数。

代码:

 #include <cstdio>

 typedef long long int LLI;
const int UP = * + ;
const LLI MOD = 1e9 + ;
LLI f[UP]; // 阶乘 LLI qmod(LLI x, LLI n, LLI mod) { // 快速幂模
x %= mod;
LLI res = ;
while(n) {
if(n & ) res = res * x % mod;
n >>= ;
x = x * x % mod;
}
return res;
} LLI inv(LLI a, LLI mod) { // 逆元
return qmod(a, mod-, mod);
} void constant() { // 预处理阶乘
f[] = ;
for(int i = ; i < UP; i++) f[i] = f[i-] * i % MOD;
} LLI C(int n, int m) { // 组合数,从n个里取m个
return f[n] * inv(f[m]*f[n-m], MOD) % MOD;
} int main() {
constant();
int n, m;
while(~scanf("%d%d", &n, &m)) {
LLI ans = (C(n+m,n) * C(n+m,n) - C(n+m,n+) * C(n+m,n-) % MOD + MOD) % MOD;
printf("%lld\n", ans);
}
return ;
}

牛客网多校训练第一场 A - Monotonic Matrix(Lindström–Gessel–Viennot lemma)的更多相关文章

  1. 牛客网多校训练第一场 B - Symmetric Matrix(dp)

    链接: https://www.nowcoder.com/acm/contest/139/B 题意: 求满足以下条件的n*n矩阵A的数量模m:A(i,j) ∈ {0,1,2}, 1≤i,j≤n.A(i ...

  2. 牛客网多校训练第一场 I - Substring(后缀数组 + 重复处理)

    链接: https://www.nowcoder.com/acm/contest/139/I 题意: 给出一个n(1≤n≤5e4)个字符的字符串s(si ∈ {a,b,c}),求最多可以从n*(n+1 ...

  3. 牛客网多校训练第一场 J - Different Integers(树状数组 + 问题转换)

    链接: https://www.nowcoder.com/acm/contest/139/J 题意: 给出n个整数的序列a(1≤ai≤n)和q个询问(1≤n,q≤1e5),每个询问包含两个整数L和R( ...

  4. 牛客网多校训练第一场 F - Sum of Maximum(容斥原理 + 拉格朗日插值法)

    链接: https://www.nowcoder.com/acm/contest/139/F 题意: 分析: 转载自:http://tokitsukaze.live/2018/07/19/2018ni ...

  5. 牛客网多校训练第一场 E - Removal(线性DP + 重复处理)

    链接: https://www.nowcoder.com/acm/contest/139/E 题意: 给出一个n(1≤n≤1e5)个整数(范围是1至10)的序列,求从中移除m(1≤m≤min(n-1, ...

  6. 牛客网多校训练第一场 D - Two Graphs

    链接: https://www.nowcoder.com/acm/contest/139/D 题意: 两个无向简单图都有n(1≤n≤8)个顶点,图G1有m1条边,图G2有m2条边,问G2有多少个子图与 ...

  7. 牛客网多校训练第二场D Kth Minimum Clique

    链接:https://ac.nowcoder.com/acm/contest/882/D来源:牛客网 Given a vertex-weighted graph with N vertices, fi ...

  8. 牛客网多校训练第九场H Cutting Bamboos

    题目链接:https://ac.nowcoder.com/acm/contest/889/H 题意:给出n颗竹子的高度,q次询问,每次询问给出l,r,x,y,每次选取[l,r]中的竹子,砍y次砍掉所有 ...

  9. 牛客网多校第3场C-shuffle card 平衡树或stl(rope)

    链接:https://www.nowcoder.com/acm/contest/141/C 来源:牛客网 题目描述 Eddy likes to play cards game since there ...

随机推荐

  1. 面向对象 OOP中的抽象类,接口以及多态

    [抽象类与抽象方法] 1.什么是抽象方法? 没有方法体{}的方法,必须使用abstract关键字修饰,这样的方法,我们称之为抽象方法. abstract function say() 2.什么是抽象类 ...

  2. git 命令记录贴

    记录下最近使用git的场景. 问题 1:将一个完整的项目发布到已创建好的git地址(码云) 执行步奏: 1.配置自己的公钥 2.检查是否连接成功 $ ssh -T git@git.oschina.ne ...

  3. 用c+libcurl+PCRE写爬虫1--编译libcurl

    打算用c语言和libcurl库在windows下实现一些爬虫操作. 一.编译libcurl 1.编译zlib 1)下载zlib http://sourceforge.net/projects/libp ...

  4. ReentrantReadWriteLock简介

    对象的方法中一旦加入synchronized修饰,则任何时刻只能有一个线程访问synchronized修饰的方法.假设有个数据对象拥有写方法与读方法,多线程环境中要想保证数据的安全,需对该对象的读写方 ...

  5. RabbitMQ基础--总结

    一. RabbitMQ的五种工作场景: 1. 单发单收 2. 单发送多接收 +++++++++++++++++++++前面两种没有使用exchange++++++++++++++++++ 3. Pub ...

  6. 深入理解jQuery插件开发总结(一)

    由于这篇文章比较长,所以分了四个阶段讲,从简单的入门级到最后到综合级,有些列子和图片都是转载其他博主的,希望对想写插件对同学会有帮助.这里分享个好久之前写的一个jquery插件(网站的功能引导插件,思 ...

  7. JS之捕获冒泡和事件委托

    一.事件流(捕获,冒泡)   事件流:指从页面中接收事件的顺序,有冒泡流和捕获流. 当页面中发生某种事件(比如鼠标点击,鼠标滑过等)时,毫无疑问子元素和父元素都会接收到该事件,可具体顺序是怎样的呢?冒 ...

  8. JavaEE之HttpServletResponse

    HttpServletResponse概述 我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应r ...

  9. iview中事件获取自定义参数

    前提:页面渲染多个cascaer组件,根据不同cascader组件选中的值,加载不同内容 解决:此时需要解决的问题是,在on-change事件中返回index索引使用如下格式: <Cascade ...

  10. 基础架构之Redis

    项目开发过程中,有些信息的变动频率是很低但又经常访问到,这些信息我们往往放在缓存中,目前在缓存组件中,Redis绝对值得你列入使用计划.更多详细信息可以参考官网 https://redis.io/.这 ...