bzoj 1266 [AHOI2006] 上学路线
传说中的经典容斥+卢卡斯定理+中国剩余定理
//Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<vector>
#include<queue>
#include<ctime>
#include<cmath>
const int N=,M=;
typedef long long LL;
using namespace std;
LL n,m,p,f[][N],pr[][],inv[][],b[],T,mi[]={,,,,}; struct node {
LL x,y;
friend bool operator <(const node&A,const node&B) {
return A.x<B.x||(A.x==B.x&&A.y<B.y);
}
}pp[N]; template<typename T> void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} LL lucas(LL n,LL m,int k) {
if(m>n) return ;
if(n<mi[k]) return pr[k][n]*inv[k][m]%mi[k]*inv[k][n-m]%mi[k];
return lucas(n%mi[k],m%mi[k],k)*lucas(n/mi[k],m/mi[k],k)%mi[k];
} void exgcd(LL a,LL b,LL &x,LL &y) {
if(!b) { x=; y=; return; }
exgcd(b,a%b,y,x); y-=a/b*x;
} int main() {
read(n); read(m); read(T); read(p);
for(int i=;i<=T;i++) {
read(pp[i].x); read(pp[i].y);
}
pp[T+].x=n; pp[T+].y=m; n=T+;
sort(pp+,pp+n+);
if(p==) {
pr[][]=; mi[]=p;
for(int i=;i<=mi[];i++) pr[][i]=pr[][i-]*i%p;
inv[][]=inv[][]=;
for(int i=;i<=mi[];i++) inv[][i]=(p-p/i*inv[][p%i]%p)%p;
for(int i=;i<=mi[];i++) (inv[][i]*=inv[][i-])%=p;
}
else for(int k=;k<=;k++) {
pr[k][]=; inv[k][]=inv[k][]=;
for(int i=;i<=mi[k];i++) pr[k][i]=pr[k][i-]*i%mi[k];
for(int i=;i<=mi[k];i++) inv[k][i]=(mi[k]-mi[k]/i*inv[k][mi[k]%i]%mi[k])%mi[k];
for(int i=;i<=mi[k];i++) (inv[k][i]*=inv[k][i-])%=mi[k];
}
for(int k=;k<=;k++) {
for(int i=;i<=n;i++) {
f[k][i]=lucas(pp[i].x+pp[i].y,pp[i].x,k);
for(int j=;j<i;j++) if(pp[j].x<=pp[i].x&&pp[j].y<=pp[i].y) {
f[k][i]-=f[k][j]*lucas(pp[i].x-pp[j].x+pp[i].y-pp[j].y,pp[i].x-pp[j].x,k)%mi[k];
if(f[k][i]<) f[k][i]+=mi[k];
if(f[k][i]>=mi[k]) f[k][i]%=mi[k];
}
}
if(p==) {
printf("%lld\n",f[][n]);
return ;
}
}
for(int i=;i<=;i++)
b[i]=f[i][n];
LL res=;
for(int i=;i<=;i++) {
LL tp=M/mi[i],x,y;
exgcd(mi[i],tp,x,y);
if(y<) y+=M; if(y>M) y%=M;
res=(res+y*tp%M*b[i]%M)%M;
}
printf("%lld\n",res);
return ;
}
bzoj 1266 [AHOI2006] 上学路线的更多相关文章
- 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 ...
- 洛谷 P4300 BZOJ 1266 [AHOI2006]上学路线route
题目描述 可可和卡卡家住合肥市的东郊,每天上学他们都要转车多次才能到达市区西端的学校.直到有一天他们两人参加了学校的信息学奥林匹克竞赛小组才发现每天上学的乘车路线不一定是最优的. 可可:“很可能我们在 ...
- BZOJ 1266: [AHOI2006]上学路线route
题目描述 可可和卡卡家住合肥市的东郊,每天上学他们都要转车多次才能到达市区西端的学校.直到有一天他们两人参加了学校的信息学奥林匹克竞赛小组才发现每天上学的乘车路线不一定是最优的. 可可:"很 ...
- [BZOJ 1266][AHOI2006]上学路线(最短路+最小割)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1266 分析: 很简单的题目,容易想到就是把所有的最短路径挑出来,然后在这个图里跑最小割 ...
- BZOJ 1266: [AHOI2006]上学路线route Floyd_最小割
十分简单的一道题. 图这么小,跑一边 Floyd 就得到第一问最短路径的答案. 考虑第二问怎么求:我们可以先将最短路径组成的图从原图中抽离出来,构成新图 $G$. 我们发现,只要 $G$ 的起点与终点 ...
- bzoj 1266 1266: [AHOI2006]上学路线route
1266: [AHOI2006]上学路线route Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 2356 Solved: 841[Submit][S ...
- bzoj1266 [AHOI2006]上学路线route floyd建出最短路图+最小割
1266: [AHOI2006]上学路线route Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 2490 Solved: 898[Submit][S ...
- bzoj1266 [AHOI2006]上学路线route floyd+最小割
1266: [AHOI2006]上学路线route Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 2490 Solved: 898[Submit][S ...
随机推荐
- springcloud Eureka Finchley.RELEASE 版本
创建一个父项目cloud-demo pom.xml <?xml version="1.0" encoding="UTF-8"?> <proje ...
- Luogu P4180 【模板】严格次小生成树[BJWC2010]
P4180 [模板]严格次小生成树[BJWC2010] 题意 题目描述 小\(C\)最近学了很多最小生成树的算法,\(Prim\)算法.\(Kurskal\)算法.消圈算法等等.正当小\(C\)洋洋得 ...
- Leetcode187. Repeated DNA Sequences重复的DNA序列
所有 DNA 由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:"ACGAATTCCG".在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助. 编写一个函数 ...
- html--浮动高度塌陷问题
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- [JZOJ3167] 【GDOI2013模拟3】查税
题目 描述 题目大意 维护一个有一次函数组成的序列 具体来说,对于位置xxx,现在的值为sx+zx∗(T−tx)s_x+z_x*(T-t_x)sx+zx∗(T−tx) 有两个操作,修改某个位置上 ...
- python mysql数据库中 json的存储
首先数据库里的字段类型需要设置为json: 存储这个json时需要把这个json变为字符串,而且是最外层为单引号,内部字符串为双引号!如图: 所以python脚本中这个字段的字符串应该这样写: 得出 ...
- VS2010-MFC(VS2010应用程序工程中文件的组成结构)
转自:http://www.jizhuomi.com/software/143.html 用应用程序向导生成框架程序后,我们可以在之前设置的Location下看到以解决方案名命名的文件夹,此文件夹中包 ...
- Java-MyBatis-MyBatis3-XML映射文件:自动映射
ylbtech-Java-MyBatis-MyBatis3-XML映射文件:自动映射 1.返回顶部 1. 自动映射 正如你在前面一节看到的,在简单的场景下,MyBatis 可以为你自动映射查询结果.但 ...
- 基于SpringBoot免费开源的微信管家平台,Jeewx-Boot 1.0.3 版本发布
项目介绍 JeewxBoot 是一款基于SpringBoot的免费微信开发平台.支持微信公众号.小程序官网.微信抽奖活动.Jeewx-Boot实现了微信公众号管理.小程序CMS.微信抽奖活动等基础功能 ...
- ES6之主要知识点(一)
引自:http://es6.ruanyifeng.com let 块级作用域 const 1.let let声明的变量只在它所在的代码块有效. for循环的计数器,就很合适使用let命令. var a ...