Monotonic Matrix

题意:

问有多少个n * m的矩阵A满足一下情况:答案mod 1e9+7

  1. 矩阵A的所有元素∈{0,1,2}
  2. Ai,j<=Ai+1,jA_{i,j}<=A_{i+1,j}Ai,j​<=Ai+1,j​
  3. Ai,j<=Ai,j+1A_{i,j}<=A_{i,j+1}Ai,j​<=Ai,j+1​

题解:

我们先看看这个式子有啥规律?
对于每一行,每一列都是非下降序列,也就是说如果有一位是2,其后面都是2,如果有一位是1,其前面都是1
那我们考虑元素01和12的分界线
是(n,0)到(0,m)的两条不相交(可重合的路径)
第一个分界线以上的点是一种,两条分界线之间是一种,第二个分界线以下是一种(详细看图)

不过现在这个两个线的起终点一样,我们可以将第一个线进行偏移,变成起点为(n-1,-1)到(-1,m-1).(注意这两个线不是弧形的,而是水平竖直线)
现在问题就是起点为(n-1,-1),终点为(-1,m-1)和起点为(n,0),终点为(0,m),两个不相交路径的条数
怎么做?引入LGV定理
就有:
起点{a1,a2a_{1},a_{2}a1​,a2​}={(n,0),(n−1,−1)(n,0),(n-1,-1)(n,0),(n−1,−1)}
终点{b1,b2b_{1},b_{2}b1​,b2​}={(0,m),(−1,m−1)(0,m),(-1,m-1)(0,m),(−1,m−1)}
带入公式:
ans=∣(a1,b1)(a1,b2)(a2,b1)(a2,b2)∣ans= \begin{vmatrix} (a_{1},b_{1})&(a_{1},b_{2})\\ (a_{2},b_{1})&(a_{2},b_{2})\\ \end{vmatrix} ans=∣∣∣∣​(a1​,b1​)(a2​,b1​)​(a1​,b2​)(a2​,b2​)​∣∣∣∣​
(a1,b1)(a_{1},b_{1})(a1​,b1​)表示从(n,0)到(0,m)的路径数,从(n,0)到(0,m)共有n+m步,我们选择其中n步向上走,剩下的自然是向右走,共Cn+mnC_{n+m}^{n}Cn+mn​种方法,其他同理
最终答案ans=Cn+mn∗Cn+mn−1−Cn+mm−1−Cn+mnC_{n+m}^{n}*C_{n+m}^{n-1}-C_{n+m}^{m-1}-C_{n+m}^{n}Cn+mn​∗Cn+mn−1​−Cn+mm−1​−Cn+mn​

代码:

#include <bits/stdc++.h>
#include <unordered_map>
#define debug(a, b) printf("%s = %d\n", a, b);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
clock_t startTime, endTime;
//Fe~Jozky
const ll INF_ll= 1e18;
const int INF_int= 0x3f3f3f3f;
void read(){};
template <typename _Tp, typename... _Tps> void read(_Tp& x, _Tps&... Ar)
{x= 0;char c= getchar();bool flag= 0;while (c < '0' || c > '9')flag|= (c == '-'), c= getchar();while (c >= '0' && c <= '9')x= (x << 3) + (x << 1) + (c ^ 48), c= getchar();if (flag)x= -x;read(Ar...);
}
template <typename T> inline void write(T x)
{if (x < 0) {x= ~(x - 1);putchar('-');}if (x > 9)write(x / 10);putchar(x % 10 + '0');
}
void rd_test()
{#ifdef ONLINE_JUDGE
#elsestartTime = clock ();freopen("data.in", "r", stdin);
#endif
}
void Time_test()
{#ifdef ONLINE_JUDGE
#elseendTime= clock();printf("\nRun Time:%lfs\n", (double)(endTime - startTime) / CLOCKS_PER_SEC);
#endif
}
const int maxn=3e6+9;
const int mod=1e9+7;
ll inv[maxn];
ll f[maxn];
ll f0[maxn];
void init(int N){inv[1]=inv[0]=1;f[1]=f[0]=1;f0[0]=f0[1]=1;for(int i=2;i<=N;i++){f[i]=f[i-1]*i%mod;f0[i]=(mod-mod/i)*f0[mod%i]%mod;inv[i]=inv[i-1]*f0[i]%mod;}
}
ll C(ll a,ll b){return 1ll*f[a]*inv[b]%mod*inv[a-b]%mod;
}
int main()
{//rd_test();init(10000);ll n,m;while(~scanf("%lld%lld",&n,&m)){cout<<(C(n+m,n)*C(n+m,n)%mod-C(n+m,n-1)*C(n+m,m-1)%mod+mod)%mod<<endl;}//Time_test();
}

2019牛客多校Monotonic Matrix相关推荐

  1. 2019牛客多校第一场

    2019牛客多校第一场 题号 题目 知识点 A Monotonic Matrix B Symmetric Matrix C Fluorescent 2 D Two Graphs E Removal F ...

  2. 2019牛客多校训练第十场F Popping Balloons

    2019牛客多校训练第十场F Popping Balloons 题意:二维平面内给你若干个点,然后你可以在x轴和y轴分别射三枪(每一枪的间隔是R),问最多能射掉多少气球. 题解:贪心.这个应该只能算作 ...

  3. 2019牛客多校第九场AThe power of Fibonacci(广义BM)

    2019牛客多校第九场AThe power of Fibonacci(广义BM) 题目大意 求斐波那契数列m次方的前n项和 解题思路 显然,斐波那契的m次方前缀和依然是线性递推,因此考虑用exBM求解 ...

  4. 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数

    目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...

  5. Knapsack Cryptosystem(2019牛客多校折半查询)

    链接:https://ac.nowcoder.com/acm/contest/889/D 来源:牛客网 Amy asks Mr. B problem D. Please help Mr. B to s ...

  6. Quadratic equation(二次剩余)2019牛客多校第九场

    链接:https://ac.nowcoder.com/acm/contest/889/B 来源:牛客网 题目描述 Amy asks Mr. B problem B. Please help Mr. B ...

  7. [2019牛客多校训练第3场]Median

    链接:https://ac.nowcoder.com/acm/contest/883/I 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  8. 2019牛客多校训练营第一场 H题 HOR 题解

    题目描述: 输入描述: 输出描述: 示例1: 题解: 更多问题可关注牛客竞赛区,一个刷题.比赛.分享的社区. 传送门:https://ac.nowcoder.com/acm/contest/discu ...

  9. 2019牛客多校 第七场 B Irreducible Polynomial 多项式因式分解判断

    链接:https://ac.nowcoder.com/acm/contest/887/B 来源:牛客网 Irreducible Polynomial 时间限制:C/C++ 1秒,其他语言2秒 空间限制 ...

最新文章

  1. 高并发场景之RabbitMQ篇
  2. 整理一些sql server基础资料
  3. 为什么下拉框拉不下来_零线不带电,为什么还要拉一条?直接用地做零线不是更省钱?...
  4. Hadoop2调优(一):如何控制job的map任务和reduce任务的数量
  5. Django的静态文件路径设置对比
  6. 如何定义一个 Listint,string 这样的 List ?
  7. wince bib文件合成
  8. java 自定义注解 生成json_Jackson 通过自定义注解来控制json key的格式
  9. 【渝粤教育】国家开放大学2018年秋季 0133-21T大学物理 参考试题
  10. 学籍专业填计算机还是理工,学生程序论文,关于高职非计算机专业理工类《C语言程序设计》课程的教学相关参考文献资料-免费论文范文...
  11. ESB 分布式处理技术 Remoting
  12. 电容器指南(一)-基本性能介绍
  13. 用Python写个自动批改作业系统~
  14. 3手机版怎么换行_敬业签手机版便签软件怎么绑定QQ或微信互联登录?
  15. R语言 K-M生存分析,ggplot2制作好看的生存曲线
  16. vl53l1x激光测距讲解
  17. gdb中文乱码_关于中文和乱码
  18. Python turtle 画正多边形和多角形
  19. Java 集合深入理解(9):Queue 队列
  20. 3行代码实现自动刷抖音

热门文章

  1. 那些年,画家发明的黑科技
  2. 入门机器学习,开启人工智能大门!
  3. K-Means算法的10个有趣用例
  4. Logistic回归主要应用领域
  5. 如何用Java讲一句话重复五遍_Java 0515 第二次课作业
  6. bitmap 转byte[]后读取_闲谈redis的bitmap
  7. ai怎么调界面大小_科研论文作图系列-从PPT到AI (一)
  8. python柱状图挨在一起_echarts多个柱状图展示问题(bar都挤到一起了)
  9. python课程思路_学习python课程第二十六天
  10. 传递函数_使用python计算麦克风阵列信号的传递函数