当前位置: 首页 > 编程日记 > 正文

BZOJ3782 上学路线 【dp + Lucas + CRT】

题目链接

BZOJ3782

题解

我们把终点也加入障碍点中,将点排序,令\(f[i]\)表示从\((0,0)\)出发,不经过其它障碍,直接到达\((x_i,y_i)\)的方案数
首先我们有个大致的方案数\({x_i + y_i \choose x_i}\)
但是中途可能会经过一些其它障碍点,那么就减去
所以
\[f[i] = {x_i + y_i \choose x_i} - \sum\limits_{j = 1}^{i - 1} {x_i - x_j + y_i - y_j \choose x_i - x_j}f[j]\]

由于坐标很大,又观察到一种模数不大,一种模数为合数,且最大质因子也不大
所以可以\(Lucas\)定理 + CRT合并

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define mp(a,b) make_pair<int,int>(a,b)
#define cls(s) memset(s,0,sizeof(s))
#define cp pair<int,int>
#define LL long long int
using namespace std;
const int maxn = 205,maxm = 1000005,INF = 1000000000;
inline LL read(){LL out = 0,flag = 1; char c = getchar();while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}return out * flag;
}
LL N,M,T,P;
struct point{LL x,y;}p[maxn];
inline bool operator <(const point& a,const point& b){return a.x == b.x ? a.y < b.y : a.x < b.x;
}
int pr[10],pi;
LL fac[5][maxm],fv[5][maxm],inv[5][maxm];
void sp(){int x = P;for (int i = 2; i * i <= x; i++)if (x % i == 0){pr[++pi] = i;x /= i;}if (x - 1) pr[++pi] = x;
}
void init(){for (int j = 1; j <= pi; j++){fac[j][0] = fac[j][1] = fv[j][0] = fv[j][1] = inv[j][0] = inv[j][1] = 1;int p = pr[j];for (int i = 2; i < pr[j]; i++){fac[j][i] = 1ll * fac[j][i - 1] * i % p;inv[j][i] = 1ll * (p - p / i) * inv[j][p % i] % p;fv[j][i] = 1ll * fv[j][i - 1] * inv[j][i] % p;}}
}
LL Lucas(LL n,LL m,int p){if (m > n) return 0;if (n < pr[p] && m < pr[p])return 1ll * fac[p][n] * fv[p][m] % pr[p] * fv[p][n - m] % pr[p];return 1ll * Lucas(n % pr[p],m % pr[p],p) * Lucas(n / pr[p],m / pr[p],p) % pr[p];
}
LL C(LL n,LL m){if (m > n) return 0;LL re = 0;for (int i = 1; i <= pi; i++){re = (re + 1ll * Lucas(n,m,i) * (P / pr[i]) % P * inv[i][P / pr[i] % pr[i]] % P) % P;}return re;
}
LL f[maxn];
int main(){N = read(); M = read(); T = read(); P = read();sp(); init();  //REP(i,pi) printf("%d ",pr[i]); puts("");REP(i,T) p[i].x = read(),p[i].y = read();++T;p[T].x = N,p[T].y = M;sort(p + 1,p + T + 1);for (int i = 1; i <= T; i++){f[i] = C(p[i].x + p[i].y,p[i].x);for (int j = 1; j < i; j++)if (p[j].x <= p[i].x && p[j].y <= p[i].y)f[i] = (f[i] - 1ll * f[j] * C(p[i].x - p[j].x + p[i].y - p[j].y,p[i].x - p[j].x) % P) % P;f[i] = (f[i] + P) % P;if (p[i].x == N && p[i].y == M){printf("%lld\n",f[i]);}}return 0;
}

转载于:https://www.cnblogs.com/Mychael/p/9190939.html

相关文章:

007本周总结报告

这周感觉自己什么也没做&#xff0c;好没有成就感。这周大部分的时间都用来学车了&#xff0c;自己也是东跑西跑的&#xff0c;然而车也没有学好&#xff0c;java也学习的少的可伶。自己总是感觉自己学车都要忙死了。哪有什么时间学习java啊&#xff0c;能学好车就不错了。其实…

python max函数_Python3

max(x, y[, z...]):Number|Sequence 入参类型不能混入&#xff08;要么全Number(int|float|complex|bool&#xff09;&#xff0c;要么全序列&#xff09;。 入参是序列的话&#xff1a; 单序列入参&#xff0c;返回序列中最大的一个数值多序列入参, 按索引顺序&#xff0c;逐一…

Linux Mount Windows域用户限制的共享文件夹

sud现在一直使用linux作为主要的办公os&#xff0c;但是最近公司统一使用windows域服务器了&#xff0c;共享就出现比较打的问题了&#xff0c;原因如下&#xff1a;1、linux下通常mount windows共享文件夹Linux下使用smbfs形式访问windows共享文件夹是众所周知的事情&#xff…

B-tree索引与Bitmap索引的对比测试

昨天发现一条语句没有走索引&#xff0c;检查发现表没有建相应索引&#xff0c;先建立B-tree索引&#xff0c;测试发现是全表扫描&#xff0c;检查表数据发现此字段的值只有2个,删除原索引又建立bitmap索引&#xff0c;发现还是全表扫描&#xff0c;再次检查数据发现2个值基本各…

python 将字符串转换成字典dict

JSON到字典转化&#xff1a; 输出dict类型 dictinfo json.loads(json_str)字典到JSON转化&#xff1a; 输出str类型 # 比如&#xff1a; info {name : jay, sex : male, age: 22} jsoninfo simplejson.dumps(info) print jsoninfo Unicode到字典的转化&#xff1a; json.loa…

pidstat 命令详解(转载)

转自https://www.jianshu.com/p/3991c0dba094 pidstat 概述 pidstat是sysstat工具的一个命令&#xff0c;用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。pidstat首次运行时显示自系统启动开始的各项统计信息&#xff0c;之后运行pidstat将显示自上次运…

Oracle中table的大小计算方式

1. Check the size of each table on specific schema ; SQL> select segment_name,bytes/1024/1024 as mb from user_segments; SEGMENT_NAME MB -------------------- ---------- SALES 542. 转载于:https://www.cnblogs.com/jeff…

python编码问题无法复现_Python编码问题详解

1. 基本概念 字符集&#xff08;Character set&#xff09; 解释&#xff1a;文字和符合的总称 常见字符集&#xff1a; Unicode字符集 ASCII字符集&#xff08;Unicode子集&#xff09; GB2312字符集 编码方法&#xff08;Encoding&#xff09; 解释&#xff1a;将字符对应到字…

重新开始 2011/11/25

在csdn上写过几篇文章&#xff0c;始终没有坚持下来&#xff0c;也是由于自己没有一个明确的目标的缘故&#xff1b;当自己感觉乱的时候&#xff0c;总是想改变点东西&#xff0c;重新开始&#xff0c;改变了博客类的东西就真的能重新开始吗&#xff1f;现在我想换个博客就换个…

【转载】springboot:如何优雅的使用mybatis

这两天启动了一个新项目因为项目组成员一直都使用的是mybatis&#xff0c;虽然个人比较喜欢jpa这种极简的模式&#xff0c;但是为了项目保持统一性技术选型还是定了 mybatis。到网上找了一下关于spring boot和mybatis组合的相关资料&#xff0c;各种各样的形式都有&#xff0c;…

c3p0连接池用法

使用连接池的时候并不是在代码中不用获取/释放数据库连接&#xff0c;而是在代码中向连接池申请/释放连接&#xff0c;对于代码而言&#xff0c;可以把连接池看成数据库。 换句话说&#xff0c;连接池就是数据库的代理&#xff0c;之所以要使用这个代理是因为直接向数据库申请/…

我所理解的字符编码

1&#xff0c;Ascii和ebcic. 为了方便交流&#xff0c;美国人发明了ASCII编码&#xff0c;后来被确认为国际标准。后来以发明了EBCDIC编码。 一般地说&#xff0c;开放的操作系统&#xff08;LINUX 、WINDOWS等&#xff09;采用ASCII 编码&#xff0c;而大型主机系统&#xff0…

void函数调用时显示不允许使用不完整的_C语言的角落——这些C语言不常用的特性你知道吗?...

变长参数列表头文件定义了一些宏&#xff0c;当函数参数未知时去获取函数的参数变量&#xff1a;typedef va_list宏&#xff1a;va_start()va_arg()va_end()va_list类型通过stdarg宏定义来访问一个函数的参数表&#xff0c;参数列表的末尾会用省略号省略 (va_list用来保存va_st…

centos下为firefox安装flash插件的几种方法

首先去官网去下载RPM格式的安装包&#xff0c;比如&#xff1a;flash-plugin-11.1.102.55-release.i386.rpm&#xff0c;默认下载位置是该用户的下载文件夹。 方法一&#xff1a;用gnome 双击该文件&#xff0c;按提示操作即可。 方法二&#xff1a;命令行&#xff0c;在该文件…

eoLinker AMS 专业版V3.3发布:分享项目可以测试并选择分享内容等

eoLinker AMS是集API文档管理、API自动化测试、开发协作三位一体的综合API开发管理平台&#xff0c;是中国最大的在线API管理平台。目前eoLinker AMS已经为来自全球的超过两万家企业托管超过一百万的API&#xff0c;我们感谢每个曾经以及正在支持我们的企业以及开发者朋友&…

MyBatis基础-CRUD

一、mybatis 环境搭建步骤 第一步&#xff1a;创建 maven 工程第二步&#xff1a;导入坐标第三步&#xff1a;编写必要代码&#xff08;实体类和持久层接口&#xff09;第四步&#xff1a;编写 SqlMapConfig.xml第五步&#xff1a;编写映射配置文件第六步&#xff1a;编写测…

python答题系统的代码_Python考试系统自动答题(教务处)

要求 某学校要求登录教务处网站 做一个测试题 30分钟300道题&#xff0c;240分几个&#xff0c;题量不少&#xff0c;题还不好做。 研究发现原来在网站上有题库 但是一道题只有6s 的时间作答 边查边做时间不够 人生苦短&#xff0c;何不Python当歌&#xff1f; 来个自动答题的智…

((ios开发学习笔记九)) Simple TableView 实现(附 实例源码)

实现效果&#xff1a; 实现过程&#xff1a; Step One 创建单个窗体项目 Step Two 创建control 接口 Step Three 创建窗体和关联关系 Step four 实现table view 的接口 control 初始化选择数据 实现Data Source 部分 实现TableView委托部分 源码下载 TestTableView.zip转载于:…

24个为Web开发人员准备的CSS3实用教程

本文搜集了一些关于CSS3的最新教程。你可以根据这些教程或技术来实现网页设计&#xff0c;包括&#xff1a;文字阴影、圆角框、盒模型尺寸计算&#xff08;box sizing&#xff09;、透明效果处理、多重背景、边框图像等。以下这些都是非常实用的CSS3教程&#xff0c;提供了许多…

前端基础之JQuery

一、什么是JQuery &#xff3b;1&#xff3d; jQuery由美国人John Resig创建&#xff0c;至今已吸引了来自世界各地的众多 javascript高手加入其team。 &#xff3b;2&#xff3d; jQuery是一种新型的JavaScript库。jq是用js写的&#xff0c;能用jq实现&#xff0c;用js都能…

测试linux下磁盘的读写速率

1&#xff09; 通过df -h命令查看磁盘情况Filesystem Size Used Avail Use% Mounted on/dev/sda4 289G 61G 214G 23% /tmpfs 7.8G 0 7.8G 0% /dev/shm/dev/sda2 969M 62M 857M 7% /boot/dev/sda1 …

multipart request_Request和Response

Response讲解7.1 Response简介定义辅助 servlet 将响应发送到客户端的对象。servlet 容器创建 ServletResponse 对象&#xff0c;并将它作为参数传递给 servlet 的 service 方法。 要发送 MIME 正文响应中的二进制数据&#xff0c;请使用 #getOutputStream 返回的 ServletOutpu…

SharePoint 客户端经常弹出Windows验证登录框问题

场景描述&#xff1a; Site工作人员UserA创建了一个Task&#xff0c;并且Assign给UserB。UserB接到来自Task List的邮件通知。这时UserA发现Assign的人错了&#xff0c;重新修改Task Item&#xff0c;将任务重新Assign给另外一个用户UserC&#xff0c;并且同时收回了UserB的访问…

SkFlattenable /Registrar/

/** \class SkFlattenableSkFlattenable is the base class for objects that need to be flattenedinto a data stream for either transport or as part of the key to thefont cache.*/ class SK_API SkFlattenable : public SkRefCnt {}以SkFlattenable为基类的对象是&…

启动 ServiceFabric Windows服务报1053

Remote Procedure Call (RPC) Locator和 Windows Firewall是否启动。 以管理员身份运行PowerShell&#xff0c;输入Unregister-ScheduledTask FabricCounters&#xff0c;然后输入Y。 到这一步基本OK了 右下角reset sf后查看是否存在 X:\SfDevCluster\Data\ImageStoreShare 文件…

Spring基础面试题(一)

Spring是什么&#xff1f;Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架&#xff0c;目的是用于简化企业应用程序的开发&#xff0c;它使得开发者只需要关心业务需求。常见的配置方式有三种&#xff1a;基于XML的配置、基于注解的配置、基于…

C#线程间操作无效: 从不是创建控件 XX 的线程访问它

转自&#xff1a;http://www.arasplm.net/index.php/zh/community/myblog/c-xx-.html 前些天做的要使用到线程的项目&#xff0c;现在和大家分享一下感受&#xff01; 以下面小列子为例&#xff0c;给出这个问题的解决办法。下面的列子是以一个计数器为列讲解的。 public Form1…

boost安装_【环境搭建】源码安装Boost

写C的话boost是必不可少的&#xff0c;本文将boost的安装过程用写成脚本&#xff0c;直接一行命令解决整个编译安装过程&#xff1a;sudo bash boost-linux-installer.sh下面是boost-linux-installer.sh的内容&#xff1a;#!/usr/bin/env bash

css新闻列表优化-突破思维新方法更利于搜索引擎

效果图如下&#xff1a; 也许你会认为这个是很简单的&#xff0c;呵呵那是因为一般写这个列表的时候用的都是时间写在前面&#xff0c;标题写在后面&#xff0c;那样对于显示来说是先有时间后有标题的&#xff0c;对搜索引擎不是很友好。 老方法大概是这样的&#xff1a; html代…

STL使用记录

1&#xff0c;map 对map实在不熟。。。赶紧记录一下用法吧。 后来再发现新的用法再补充吧 定义&#xff1a; map<int, int> m; 其中的int可以为自定义的任何类型。 m[key值类型的变量] value值&#xff1b; 但是注意如果key值是自定义的结构体的话&#xff0c;一定要重载…