题目大意:
  有一个$n\times m(n,m\leq 10^9)$的网格图,从一个点可以到下一行中列数比它大的点。有$k(k\leq 2000)$个点是不能走的,问从第$1$行到第$n$行共有几种方案。

思路:
  动态规划求出以点$i$为终点的方案数,直接$O(nm)$推显然会超时,因此我们$O(k)$可以对于每个障碍点求出组合数。组合数可以用Lucas定理求。
  Lucas定理:$\binom{n}{m}\mod p=\binom{\lfloor\frac{n}{p}\rfloor}{\lfloor\frac{m}{p}\rfloor}\binom{n\mod p}{m\mod p}\mod p$。

 #include<cstdio>
#include<cctype>
#include<vector>
#include<algorithm>
typedef long long int64;
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
const int mod=,K=;
int fact[mod],factinv[mod],f[K];
std::pair<int,int> v[K];
void exgcd(const int &a,const int &b,int &x,int &y) {
if(!b) {
x=;
y=;
return;
}
exgcd(b,a%b,y,x);
y-=a/b*x;
}
inline int inv(const int &x) {
int ret,tmp;
exgcd(x,mod,ret,tmp);
return (ret%mod+mod)%mod;
}
int lucas(const int &n,const int &m) {
if(n<m) return ;
if(n<mod&&m<mod) return (int64)fact[n]*factinv[m]%mod*factinv[n-m]%mod;
return (int64)lucas(n/mod,m/mod)*lucas(n%mod,m%mod)%mod;
}
int main() {
fact[]=;
for(register int i=;i<mod;i++) {
fact[i]=(int64)fact[i-]*i%mod;
}
factinv[mod-]=inv(fact[mod-]);
for(register int i=mod-;~i;i--) {
factinv[i]=(int64)factinv[i+]*(i+)%mod;
}
const int n=getint(),m=getint(),k=getint();
for(register int i=;i<k;i++) {
const int x=getint(),y=getint();
v[i]=std::make_pair(x,y);
}
std::sort(&v[],&v[k]);
v[k]=std::make_pair(n+,m+);
for(register int i=;i<=k;i++) {
f[i]=lucas(v[i].second-,v[i].first-);
for(register int j=;j<i;j++) {
if(v[i].first<=v[j].first||v[i].second<=v[j].second) continue;
f[i]=((f[i]-(int64)f[j]*lucas(v[i].second-v[j].second-,v[i].first-v[j].first-))%mod+mod)%mod;
}
}
printf("%d\n",f[k]);
return ;
}

[入门OJ3876]怎样学习哲学的更多相关文章

  1. Struts2入门3 深入学习

    Struts2入门3 深入学习 处理结果和异常 前言: Struts学习的差不多了,还有最后的一点就收官了就是结果处理和异常处理.前面学习Struts主要围绕就是Action以及struts.xml配 ...

  2. 【特别推荐】Node.js 入门教程和学习资源汇总

    这篇文章与大家分享一批很有用的 Node.js 入门教程和学习资源.Node 是一个服务器端的 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用 ...

  3. Node.js 入门教程和学习资源汇总

    这篇文章与大家分享一批很有用的 Node.js 入门教程和学习资源.Node 是一个服务器端的 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用 ...

  4. MongoDB索引(一) --- 入门篇:学习使用MongoDB数据库索引

    这个系列文章会分为两篇来写: 第一篇:入门篇,学习使用MongoDB数据库索引 第二篇:进阶篇,研究数据库索引原理--B/B+树的基本原理 1. 准备工作 在学习使用MongoDB数据库索引之前,有一 ...

  5. 免考final linux提权与渗透入门——Exploit-Exercise Nebula学习与实践

    免考final linux提权与渗透入门--Exploit-Exercise Nebula学习与实践 0x0 前言 Exploit-Exercise是一系列学习linux下渗透的虚拟环境,官网是htt ...

  6. 前端PHP入门-001-为什么学习PHP?

    写在前面的话 可能不知道能坚持多久,现在的我喜欢纯文字的描述! 希望能坚持写完,也是对自己的一个鞭策! 总顾及别人,那谁来顾及你! 为什么学习PHP? PHP入门简单,学习入门易入手[呵呵,都这么说, ...

  7. 【OpenFOAM】——OpenFOAM入门算例学习

    1  明确目标——为啥费老大劲儿学习OpenFOAM 学习OpenFOAM主要出于课题需要,希望实现以下几个目标: l  [ ]学会用SnappyHexMesh生成高质量网格: l  [ ]学习使用O ...

  8. 【NOIP2017练习】怎样学习哲学(计数,DP)

    题意:OI大师抖儿在夺得银牌之后,顺利保送pku.这一天,抖儿问长者:“虽然我已经保送了,但是我还要参加学考.马上就要考政治了,请问应该怎样学习哲学,通过政治考试?”  长者回答:“你啊,Too Yo ...

  9. 码云配合git入门命令总结学习

    目录 码云配合git入门命令总结学习 基本设置 基本命令总结学习 准备工作以及基本思路 基本命令 码云搭建仓库步骤 准备前工作 具体操作方法 远程仓库基本命令 标签相关命令 所有命令总结 基本命令总结 ...

随机推荐

  1. Python 黑魔法(持续收录)

    Python 黑魔法(持续收录) zip 对矩阵进行转置 a = [[1, 2, 3], [4, 5, 6]] print(list(map(list, zip(*a)))) zip 反转字典 a = ...

  2. 聊聊、AES 和 DES

    AES 和 DES 都是对称加密的一种,但是 DES 的 Key 是 56 位,而 AES 的 Key 有 128,256,512 可选. AES 加密AES String randomKey = & ...

  3. Ext JS 的一个非常好的学习网站

    起飞网 http://www.qeefee.com/zt-extjs 发现一个非常好的学习ExtJS的中文网站

  4. 脚本,替换ipa里面的资源,并重新打包

    今天逯同事说,可以把狂挂传奇打包的项目写成一个脚本,这样就不用担心证书有时不能用的问题了. 然后,像我这么好学的学生,当然要去执行了.(其实,以前他给的建议我都只是听听而已,这次是因为想学点东西了,所 ...

  5. c#中获得MD5字符串方法

    在用户登录的过程中,我们会遇到要查询对比用户名密码的是否存在或者是否正确,但是数据库中存放的是通过MD5加密的字符串,所有我们可以先把用户输入的用户名或者是密码先转为DM5字符串再跟数据库查出的MD5 ...

  6. hdu 2553 N皇后问题 (DFS)

    N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  7. BZOJ1027 [JSOI2007]合金 【计算几何 + floyd】

    题目 某公司加工一种由铁.铝.锡组成的合金.他们的工作很简单.首先进口一些铁铝锡合金原材料,不同种类的 原材料中铁铝锡的比重不同.然后,将每种原材料取出一定量,经过融解.混合,得到新的合金.新的合金的 ...

  8. 雅礼集训 Day1 T3 画作 解题报告

    画作 题目描述 小\(\mathrm{G}\)的喜欢作画,尤其喜欢仅使用黑白两色作画. 画作可以抽象成一个\(r\times c\)大小的\(01\)矩阵.现在小\(\mathrm{G}\)构思好了他 ...

  9. hibernate中类状态转换

  10. code forces 996BWorld Cup

    B. World Cup time limit per test 1 second memory limit per test 256 megabytes input standard input o ...