洛谷 P4478 [BJWC2018]上学路线


原题

神仙题orz,竟然没有1A。。。。容斥+卢卡斯+crt??

首先用容斥做,记\(f[i][0/1]\)表示到i号点经过了奇数/偶数个点的方案数,因为\(f[i][0]+f[i][1]=1\)所以只要记一个\(f[i]\)是经过奇数个点的方案数就行

枚举一个左下的点走到这个点,或者直接从1走到这个点,

\(f[i]=\sum_{\text{j in lower left side}}((1-f[j])\times C_{x_i+y_i-x_j-y_j}^{x_i-x_j})+C_{x_i+y_i}^{x_i}\)

答案就是从所有点走到这个点,加上从1号点走到这个点\(\sum_{i}((1-f[i])\times C_{n+m-x_i-x_j}^{n-x_i})+C_{n+m}^{n}\)

sort一遍dp就做完了,只剩下求组合数了

模数好像不是质数,分解一下发现是3×5×6793×10007

crt即可,对每个模数求一遍方案,求组合数用lucas

lucas大概就是\(C_{n}^{m}\text{mod }p=C_{\lfloor\frac{n}{p}\rfloor}^{{\lfloor\frac{m}{p}\rfloor}}\times C_{n\text{ mod }p}^{m\text{ mod }p}\mod p\)

这神仙题就做完了。。。

#include<bits/stdc++.h>
#define il inline
#define vd void
typedef long long ll;
il ll gi(){
ll x=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x;
}
ll mod;
struct yyb{ll x,y;}a[210];
il bool cmp(const yyb&a,const yyb&b){
if(a.x^b.x)return a.x<b.x;
return a.y<b.y;
}
ll f[210];
ll p[5],tot;
ll Ans[5];
ll pp[5],tt[5];
ll fact[1000010],inv[1000010];
il ll C(ll n,ll m,ll P){
if(n<m)return 0;
return fact[n]*inv[fact[m]*fact[n-m]%P]%P;
}
il ll Lucas(ll n,ll m,ll P){
if(n<m)return 0;if(!n)return 1;
return Lucas(n/P,m/P,P)*C(n%P,m%P,P)%P;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("4478.in","r",stdin);
freopen("4478.out","w",stdout);
#endif
ll n=gi(),m=gi(),t=gi();mod=gi();
if(mod==1000003)p[tot=1]=mod;
else p[++tot]=3,p[++tot]=5,p[++tot]=6793,p[++tot]=10007;
for(int i=1;i<=t;++i)a[i].x=gi(),a[i].y=gi();
std::sort(a+1,a+t+1,cmp);
ll M=1;
for(int i=1;i<=tot;++i)M*=p[i];
for(int i=1;i<=tot;++i)pp[i]=M/p[i];
for(int o=1;o<=tot;++o){
ll P=p[o];
inv[1]=1;for(int i=2;i<P;++i)inv[i]=(P-(P/i)*inv[P%i]%P)%P;
tt[o]=inv[pp[o]%P];
fact[0]=1;for(int i=1;i<P;++i)fact[i]=fact[i-1]*i%P;
Ans[o]=Lucas(n+m,n,P);
for(int i=1;i<=t;++i){
f[i]=Lucas(a[i].x+a[i].y,a[i].x,P);
for(int j=1;j<i;++j)
if(a[j].x<=a[i].x&&a[j].y<=a[i].y)
f[i]+=P-f[j]*Lucas(a[i].x+a[i].y-a[j].x-a[j].y,a[i].x-a[j].x,P)%P;
f[i]%=P;
Ans[o]+=P-Lucas(n+m-a[i].x-a[i].y,n-a[i].x,P)*f[i]%P;
}
Ans[o]%=P;
}
ll ans=0;
for(int i=1;i<=tot;++i)ans+=Ans[i]*pp[i]%mod*tt[i]%mod;
printf("%lld\n",ans%mod);
return 0;
}

洛谷 P4478 [BJWC2018]上学路线的更多相关文章

  1. P4478 [BJWC2018]上学路线

    Description 小B 所在的城市的道路构成了一个方形网格,它的西南角为(0,0),东北角为(N,M). 小B 家住在西南角,学校在东北角.现在有T 个路口进行施工,小B 不能通过这些路口.小B ...

  2. Luogu P4478 [BJWC2018]上学路线 卢卡斯+组合+CRT

    首先,从$(0,0)$走到$(n,m)$的方案数是$ C_{n+m}^n$,可以把走的方向看作一种序列,这个序列长$ n+m$ ,你需要从中任取$n$个位置,让他向右走: 然后就是如何处理不能走的点: ...

  3. 【模板】矩阵快速幂 洛谷P2233 [HNOI2002]公交车路线

    P2233 [HNOI2002]公交车路线 题目背景 在长沙城新建的环城公路上一共有8个公交站,分别为A.B.C.D.E.F.G.H.公共汽车只能够在相邻的两个公交站之间运行,因此你从某一个公交站到另 ...

  4. Java实现 洛谷 Car的旅行路线

    输入输出样例 输入样例#1: 1 3 10 1 3 1 1 1 3 3 1 30 2 5 7 4 5 2 1 8 6 8 8 11 6 3 输出样例#1: 47.5 import java.util. ...

  5. BJWC2018上学路线

    题目描述 小B 所在的城市的道路构成了一个方形网格,它的西南角为(0,0),东北角为(N,M). 小B 家住在西南角,学校在东北角.现在有T 个路口进行施工,小B 不能通过这些路口.小B 喜欢走最短的 ...

  6. [luogu4478 BJWC2018] 上学路线 (容斥原理+拓展lucas)

    传送门 Description 小B 所在的城市的道路构成了一个方形网格,它的西南角为(0,0),东北角为(N,M). 小B 家住在西南角,学校在东北角.现在有T 个路口进行施工,小B 不能通过这些路 ...

  7. [BJWC2018]上学路线

    Description 小B 所在的城市的道路构成了一个方形网格,它的西南角为(0,0),东北角为(N,M). 小B 家住在西南角,学校在东北角.现在有T 个路口进行施工,小B 不能通过这些路口.小B ...

  8. 洛谷 P4484 - [BJWC2018]最长上升子序列(状压 dp+打表)

    洛谷题面传送门 首先看到 LIS 我们可以想到它的 \(\infty\) 种求法(bushi),但是对于此题而言,既然题目出这样一个数据范围,硬要暴搜过去也不太现实,因此我们需想到用某种奇奇怪怪的方式 ...

  9. 洛谷 P2233 [HNOI2002]公交车路线 解题报告

    P2233 [HNOI2002]公交车路线 题目背景 在长沙城新建的环城公路上一共有8个公交站,分别为A.B.C.D.E.F.G.H.公共汽车只能够在相邻的两个公交站之间运行,因此你从某一个公交站到另 ...

随机推荐

  1. 简易使用UILabel的富文本

    简易使用UILabel的富文本 使用效果: 源码: NSString+YX.h    NSString+YX.m // // NSString+YX.h // YXKit // // Copyrigh ...

  2. PowerShell管理SCOM2007R2

    get-operationsmanagercommand #定义RMS服务器名称(SCOM管理控制台所在服务器名称)#Connect to the RMS server and initialize ...

  3. 重置 Winsock:初始化计算机网络环境

    初始化网络环境,以解决由于软件冲突.病毒原因造成的参数错误问题(复杂网络环境下慎用).批处理代码: netsh winhttp reset proxy netsh winhttp reset trac ...

  4. http协议的状态码——400,401,403,404,500,502,503,301,302等常见网页错误代码

    http协议的状态码 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态码. 100(继续) 请求者应当继续提出请求.服务器返回此代码表示已收到请求的第一部分,正在等待其余部分. 101( ...

  5. (1)访问控制 (2)final关键字 (3)对象创建的过程 (4)多态

    1.访问控制(笔试题)1.1 常用的访问控制符 public - 公有的 protected - 保护的 啥也不写 - 默认的 private - 私有的 1.2 访问控制符的比较 访问控制符 访问权 ...

  6. September 24th 2017 Week 39th Sunday

    To live is the rarest thing in the world. Most people exist. That is all. 生活是世间最罕见的事情:生存,却是世间最常见的事情: ...

  7. echo,die(),print(),print_r(),var_dump()的区别

    echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)  print()   只能打印出简单类型变量的值(如int,string)  例子 输出 3 ...

  8. mysql主从配置(5分钟解决问题)

    条件:一台阿里云服务器(centos 6.6 +mysql 5.6) 一台腾讯云服务器(centos 7.2 +mysql 5.6) 注:主库和从库版本可以一致也可以不一致,需要说明一点,如果两者版本 ...

  9. Docker镜像搭建Linux下samba共享目录

    Samba 是 SMB/CIFS 网络协议的重新实现, 它作为 NFS 的补充使得在 Linux.OS/2.DOS 和 Windows 系统中进行文件共享.打印机共享更容易实现.SMB协议是客户机/服 ...

  10. 使用nginx替换Ingress

    总感觉k8s Ingress 不可控, 所以使用nginx 替换Ingress,还是比较简单的. apiVersion: extensions/v1beta1 kind: DaemonSet meta ...