BZOJ 3782 上学路线
首先这个题需要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 上学路线的更多相关文章
- BZOJ 3782: 上学路线 [Lucas定理 DP]
3782: 上学路线 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 192 Solved: 75[Submit][Status][Discuss] ...
- bzoj 3782 上学路线 卢卡斯定理 容斥 中国剩余定理 dp
LINK:上学路线 从(0,0)走到(n,m)每次只能向上或者向右走 有K个点不能走求方案数,对P取模. \(1\leq N,M\leq 10^10 0\leq T\leq 200\) p=10000 ...
- BZOJ 3782 上学路线 ——动态规划 Lucas定理 中国剩余定理
我们枚举第一个经过的坏点,然后DP即可. 状态转移方程不是难点,难点在于组合数的处理. 将狼踩尽的博客中有很详细的证明过程,但是我只记住了结论 $n=a_1 * p^k+a_2*p^k-1...$ $ ...
- [BZOJ 1266] 上学路线Route
Link: BZOJ 1266 传送门 Solution: 好不容易自己写出来一道水题,练链式前向星的模板调了一小时o(╯□╰)o 思路非常好想,既然要想让最短路不成立,使最短路部分不连通即可 又要求 ...
- BZOJ 1266 上学路线route(最小割)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1266 题意:给出一个无向图,每条边有长度和代价.求出1到n的最短路.之后删掉一些边使得1 ...
- BZOJ 1266 上学路线(最短路+最小割)
给出n个点的无向图,每条边有两个属性,边权和代价. 第一问求1-n的最短路.第二问求用最小的代价删边使得最短路的距离变大. 对于第二问.显然该删除的是出现在最短路径上的边.如果我们将图用最短路跑一遍预 ...
- BZOJ 3782: 上学路 Lucas+ExCRT+容斥+dp
其实呢,扩展中国剩余定理还有一种理解方式:就是你有一坨东西,形如:$A[i]\equiv B[i](mod$ $P[i])$. 对于这个东西,你可以这么思考:如果最后能求出一个解,那么这个解的增量一定 ...
- BZOJ 1266: [AHOI2006]上学路线route(最短路+最小割)
第一问最短路.第二问,先把最短路的图建出来(边(u,v)满足d[s->u]+d[v->t]+d(u,v)==最短路径长度,就在图中,可以从源点和汇点分别跑一次最短路得到每个点到源点和汇点的 ...
- bzoj 1266 [AHOI2006] 上学路线 route 题解
转载请注明:http://blog.csdn.net/jiangshibiao/article/details/23989499 [原题] 1266: [AHOI2006]上学路线route Time ...
随机推荐
- Linux基础: 系统加载过程和运行级别含义
BIOS 有固化代码指向mbr,mbr指向grub(/boot/grub/下有很多引导配置信息),grub里可以配置多种linux内核vmlinux文件. 启动内核以后就开始加载各种驱动模块并进行系统 ...
- TortoiseGit GitHub 使用指南
TortoiseGit GitHub 使用指南 这个文档讲的还是比较清楚和完整的.需要注意的一点是ssh的方式,取gitHub的URL的时候选取ssh方式. http://www.360doc.co ...
- Objective-C:@property参数详解
格式:@property(param1, param2) 类型 属性名 参数可有可无 三类参数: 1.读写属性:readwrite/readonly readwrite:产生setter\getter ...
- struts2视频学习笔记 15-17 (访问或添加request属性,文件上传)
课时15 访问或添加request/session/application属性 1.简单说 page指当前页面.在一个jsp页面里有效 2.request 指从http请求到服务器处理结束,返回响应的 ...
- 算法--数组中出现一次的数,其余都出现N次
转载:http://blog.csdn.net/morewindows/article/details/12684497 题目:数组A中,除了某一个数字x之外,其他数字都出现了三次,而x出现了一次.请 ...
- 转:Nginx+Apache环境的安装与配置
转:http://www.server110.com/nginx/201404/8817.html 我们依然尽可能采用yum来安装我们需要的软件,由系统官方维护的软件,其安全性和稳定性都值得信赖,并且 ...
- 学习记录014-ssh批量分发
一.ssh服务介绍 1.ssh安全的加密协议用于远程连接服务器 2.默认端口是22,安全协议版本ssh2,它能同时支持RSA和DSA秘钥,SSH1只支持RSA 3.服务端主要包含两个服务功能ssh远程 ...
- 又一个提示框思密达,腾讯UED
demo <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf- ...
- 基础的 Linux 网络命令,你值得拥有
导读 有抱负的 Linux 系统管理员和 Linux 狂热者必须知道的.最重要的.而且基础的 Linux 网络命令合集.在 It's FOSS 我们并非每天都谈论 Linux 的"命令行方面 ...
- 各种主流数据库的比较(所以说我觉得Oracle这个keng?入的不错?)
随着计算机技术不断发展,各种数据库编程工具也随着发展,使当今的大多数程序开发人员可以摆脱枯燥无味的用计算机指令或汇编语言开发软件,而是利用一系列高效的.具有良好可视化的编程工具去开发各种数据库软件,从 ...