首先这个题需要dp.dp[i]=C(x[i]+y[i],x[i])-Σdp[j]*C(x[i]-x[j]+y[i]-y[j],x[i]-x[j])(x[i]>=x[j],y[i]>=y[j])。

然后就是喜闻乐见的lucas+CRT.

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define maxn 1000050
using namespace std;
long long n,m,t,mod,p[],ans[],inv1[][maxn],inv2[][maxn],up,f[],a[];
struct pnt
{
long long x,y;
}pt[];
bool cmp(pnt x,pnt y)
{
if (x.y!=y.y) return x.y<y.y;
return x.x<y.x;
}
long long f_pow(long long x,long long y,long long mod)
{
long long ans=,base=x;
while (y)
{
if (y&) ans=(ans*base)%mod;
base=(base*base)%mod;
y>>=;
}
return ans;
}
void get_mod(long long type)
{
up=type;
if (type==)
{
p[]=;inv1[][]=;inv2[][]=;
for (long long i=;i<=p[]-;i++)
{
inv1[][i]=inv1[][i-]*i%p[];
inv2[][i]=f_pow(inv1[][i],p[]-,p[]);
}
}
else
{
p[]=;p[]=;p[]=;p[]=;
for (long long i=;i<=;i++)
{
inv1[i][]=;inv2[i][]=;
for (long long j=;j<=p[i]-;j++)
{
inv1[i][j]=inv1[i][j-]*j%p[i];
inv2[i][j]=f_pow(inv1[i][j],p[i]-,p[i]);
}
}
}
}
long long comb(long long n,long long m,long long p,long long type)
{
if (n<m) return ;
return inv1[type][n]*inv2[type][m]%p*inv2[type][n-m]%p;
}
long long lucas(long long n,long long m,long long p,long long type)
{
if (!m) return ;
return comb(n%p,m%p,p,type)*lucas(n/p,m/p,p,type)%p;
}
long long CRT()
{
long long ret=;
for (long long i=;i<=up*up;i++)
ret=(ret+a[i]*(mod/p[i])%mod*f_pow(mod/p[i],p[i]-,p[i])%mod)%mod;
return ret%mod;
}
long long get_C(long long n,long long m)
{
for (long long i=;i<=up*up;i++) a[i]=lucas(n,m,p[i],i);
return CRT();
}
int main()
{
scanf("%lld%lld%lld%lld",&n,&m,&t,&mod);
for (long long i=;i<=t;i++) scanf("%d%d",&pt[i].x,&pt[i].y);
if (mod==) get_mod();else get_mod();
sort(pt+,pt+t+,cmp);t++;pt[t].x=n;pt[t].y=m;
for (long long i=;i<=t;i++)
{
f[i]=get_C(pt[i].x+pt[i].y,pt[i].x);
for (long long j=;j<=i-;j++)
{
if (pt[j].x<=pt[i].x && pt[j].y<=pt[i].y)
f[i]=(f[i]-f[j]*get_C(pt[i].x-pt[j].x+pt[i].y-pt[j].y,pt[i].x-pt[j].x)%mod+mod)%mod;
}
}
printf("%lld\n",(f[t]+mod)%mod);
return ;
}

BZOJ 3782 上学路线的更多相关文章

  1. BZOJ 3782: 上学路线 [Lucas定理 DP]

    3782: 上学路线 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 192  Solved: 75[Submit][Status][Discuss] ...

  2. bzoj 3782 上学路线 卢卡斯定理 容斥 中国剩余定理 dp

    LINK:上学路线 从(0,0)走到(n,m)每次只能向上或者向右走 有K个点不能走求方案数,对P取模. \(1\leq N,M\leq 10^10 0\leq T\leq 200\) p=10000 ...

  3. BZOJ 3782 上学路线 ——动态规划 Lucas定理 中国剩余定理

    我们枚举第一个经过的坏点,然后DP即可. 状态转移方程不是难点,难点在于组合数的处理. 将狼踩尽的博客中有很详细的证明过程,但是我只记住了结论 $n=a_1 * p^k+a_2*p^k-1...$ $ ...

  4. [BZOJ 1266] 上学路线Route

    Link: BZOJ 1266 传送门 Solution: 好不容易自己写出来一道水题,练链式前向星的模板调了一小时o(╯□╰)o 思路非常好想,既然要想让最短路不成立,使最短路部分不连通即可 又要求 ...

  5. BZOJ 1266 上学路线route(最小割)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1266 题意:给出一个无向图,每条边有长度和代价.求出1到n的最短路.之后删掉一些边使得1 ...

  6. BZOJ 1266 上学路线(最短路+最小割)

    给出n个点的无向图,每条边有两个属性,边权和代价. 第一问求1-n的最短路.第二问求用最小的代价删边使得最短路的距离变大. 对于第二问.显然该删除的是出现在最短路径上的边.如果我们将图用最短路跑一遍预 ...

  7. BZOJ 3782: 上学路 Lucas+ExCRT+容斥+dp

    其实呢,扩展中国剩余定理还有一种理解方式:就是你有一坨东西,形如:$A[i]\equiv B[i](mod$ $P[i])$. 对于这个东西,你可以这么思考:如果最后能求出一个解,那么这个解的增量一定 ...

  8. BZOJ 1266: [AHOI2006]上学路线route(最短路+最小割)

    第一问最短路.第二问,先把最短路的图建出来(边(u,v)满足d[s->u]+d[v->t]+d(u,v)==最短路径长度,就在图中,可以从源点和汇点分别跑一次最短路得到每个点到源点和汇点的 ...

  9. bzoj 1266 [AHOI2006] 上学路线 route 题解

    转载请注明:http://blog.csdn.net/jiangshibiao/article/details/23989499 [原题] 1266: [AHOI2006]上学路线route Time ...

随机推荐

  1. IO流--切割 合并文件

    import java.io.*; import java.util.*; public class io { public static void main(String[] args)throws ...

  2. Xcode 8 打包上线 iTunes Connect 找不到构建版本

    Xcode 8 打包上线 iTunes Connect 找不到构建版本 最近苹果推出新的mac操作系统(macOS Sierra 10.12),大家可能都已经升级了,作为一个开发者,小编肯定是第一时间 ...

  3. override和overload的区别

    override(重写,覆盖) 1.方法名.参数.返回值相同. 2.子类方法不能缩小父类方法的访问权限. 3.子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常). 4.存在于父类和子类之 ...

  4. 转:怎样在VMware ESXi上 克隆虚拟机

    Cloning virtual machines on VMware ESXi 翻译自http://www.dedoimedo.com/computers/vmware-esxi-clone-mach ...

  5. [转]Integer.valueOf(String) 方法之惑

    具体问题以前偶然遇到过,好象是一个java答题得分的论坛,当时做错还研究了下怎么回事,但是前两天遇到类似问题却没想起来.巩固下基础,转了下面文章. 以下内容转自:http://www.importne ...

  6. Linux下配置用msmtp和mutt发邮件

    Linux下可以直接用mail命令发送邮件,但是发件人是user@servername,如果机器没有外网的dns,其他人就无法回复.此时,有一个可以使用网络免费邮箱服务的邮件发送程序就比较重要了.ms ...

  7. spring mvc重定向页面

    @RequestMapping(value="/del/{id}") public String delUser(@PathVariable int id){ return &qu ...

  8. 0302IT行业就业&软件工程之我所思和所想

    阅读以下文章 http://www.thea.cn/news/terminal/9/9389.html http://www.shzhidao.cn/system/2015/09/22/0102610 ...

  9. jsp标签之<%%>和<%!%>

    <%! %>中声明的是全局变量,不过写前面最好<% %>中声明的是局部变量.<%=%>一般表达式,输出某一变量的值.例如:<%! String totalSt ...

  10. 常州培训 day1 解题报告

    第一题:(骗分容易,AC难.) 题目大意: 给出一个字符串,找出满足条件A的区间的个数.A:字符A,B,C的出现次数相同. 都出现0次也算,区间的长度可以是0(就是只有一个数).30% |S| ≤ 1 ...