P5509 派遣
数论小杂烩(
由题意,对于每个士兵 \(i\),要么选,对答案产生 \(a_i(\frac{x}{i-x})\) 倍的贡献,要么不选,对答案产生 \(1\) 倍的贡献。
由此可知每个士兵之间是独立的,不相互影响,则根据乘法原理,答案应为
\]
。大力展开,即
\]
,即
\]
。不妨将分子分母拆开来看:
分子:
\[\prod_{i=0}^{n-1}\prod_{j=0,ik+j\neq0}^{k-1}ij
\],即
\[(nk-1)!
\]。
分母:Markdown 渲染好像不太行。。。
|\(i/j\)|\(0\)|\(1\)|\(2\)|\(\cdots\)|\(k-1\)
|:-:-:-:-:-:-:-
|\(0\)|/|\(1\)|\(2\)|\(\cdots\)|\(k-1\)
|\(1\)|\(k-1\)|\(k-1+1\)|\(k-1+2\)|\(\cdots\)|\(2(k-1)\)
|\(2\)|\(2(k-1)\)|\(2(k-1)+1\)|\(2(k-1)+2\)|\(\cdots\)|\(3(k-1)\)
|$\cdots\ \(|\)\cdots\(|\)\cdots\(|\)\cdots\(|\)\cdots\(|\)\cdots\(|
|\)n-2\(|\)(n-2)(k-1)\(|\)(n-2)(k-1)+1\(|\)(n-2)(k-1)+2\(|\)\cdots\(|\)(n-1)(k-1)\(
|\)\ \ n-1\ \ \(|\)\ \ (n-1)(k-1)\ \ \(|\)\ \ (n-1)(k-1)+1\ \ \(|\)\ \ (n-1)(k-1)+2\ \ \(|\)\ \ \cdots\ \ \(|\)\ \ n(k-1)\ \ $不难发现 \(1\sim n(k-1)\) 各出现了一次,且每一行的第一个数与上一行的最后一个数相等,即 \(k-1\),\(2(k-1)\),\(\cdots\),\((n-1)(k-1)\) 多出现了一次。
那么分母为
\[[n(k-1)]!\times \prod_{i=1}^{n-1}i(k-1)
\],即
\[(nk-k)!\times (k-1)^{n-1}\times (n-1)!
\]。
综上,可知答案为:
\]
。但是 \(nk\) 已经达到了 \(10^{18}\) 的数量级,怎么求这玩意的阶乘?
求 \(v!\ (v>10^8)\) 模 \(p\ (p<10^8)\):
抓住模数 \(p=1145141\),对 \(1\sim v\) 的每个数取模,最终会得到 \(\left\lfloor \dfrac{v}{p}\right\rfloor\) 个 \(0\sim p-1\) 和 \(1\sim (v\bmod p)\)。
将所有 \(p\) 的倍数除以 \(p\),得到 \(\left\lfloor \dfrac{v}{p}\right\rfloor\) 个 \(1\sim p-1\) 和 \(1\sim (v\bmod p)\) 和 \(1\sim \left\lfloor \dfrac{v}{p}\right\rfloor\)。
则答案为
\]
,预处理 \(1\sim p-1\) 的阶乘,用递归 + 快速幂即可做到 \(\mathcal O(\log v)\) 计算。
根据威尔逊定理 \((p-1)!\equiv -1\ (\bmod\ p),p\in \rm{prime}\),原答案可化简为
\]
,这样可以做到 \(\mathcal O(\log_p v)\) 计算,可以近似看做常数。
代码:
ll cal(ll v){return v<mod?fc[v]:fc[v%mod]*((v/mod)&1?-1:1)%mod*cal(v/mod)%mod;}
接下来计算出分子和分母各含有多少个 \(p\):
- \(v!\):一般的,\(v!\) 中含有质因子 \(p\) 的个数应为 \(\sum_{i=1,v\geq p^i}\left\lfloor \dfrac{v}{p^i}\right\rfloor\),但此处 \(v<p^3\),则可以化简为 \(\left\lfloor \dfrac{v}{p}\right\rfloor+\left\lfloor \dfrac{v}{p^2}\right\rfloor\)。
- \((k-1)^{n-1}\):
- 当 \(p\mid k-1\) 时,\(p\) 的个数为 \(n-1\),此时一定无解(即输出 \(\tt{-1}\)),读者自证不难。
- 当 \(p\nmid k-1\) 时,\(p\) 的个数为 \(0\),此时一定有解,读者自证不难。
综上,特判掉 \(p\mid k-1\) 的情况,记 \(c\) 为最终答案含有质因子 \(p\) 的个数,则
\]
,可以证明 \(c\geq 0\)。
那么,当 \(c>0\) 时,\(ans\equiv 0\ (\bmod\ p)\),输出 \(0\) 即可,否则计算上文推出的答案:
\]
。计算快速幂时根据费马小定理将质数 \(n-1\) 模 \(p-1\),时间复杂度 \(\mathcal O(p+t\log p)\)。
代码片段:
ll ksm(ll a,ll b){
ll s=1,m=a;
while(b){
if(b&1)s=s*m%mod;
m=m*m%mod,b>>=1;
} return s;
} ll inv(ll x){return ksm(x%mod,mod-2);}
ll t,n,k,fc[mod+5];
ll cal(ll v){return v<mod?fc[v]:fc[v%mod]*((v/mod)&1?-1:1)%mod*cal(v/mod)%mod;}
int main(){
cin>>t,fc[0]=1;
for(int i=1;i<mod;i++)fc[i]=fc[i-1]*i%mod;
while(t--){
n=read(),k=read();
if(n==1)pc('1');
else if((k-1)%mod==0)pc('-'),pc('1');
else{
ll l=n*k-n,r=n*k-1;
if(r/mod+r/mod/mod>l/mod+l/mod/mod+(n-1)/mod)pc('0');
else print(cal(r)*inv(cal(l))%mod*inv(ksm(k-1,(n-1)%(mod-1))*cal(n-1))%mod);
} pc('\n');
}
return flush(),0;
}
求赞 qwq。
P5509 派遣的更多相关文章
- 洛谷 P5509 派遣
题目传送门 心路历程: 每想到一种思路,就有一种要做出来的感觉.但一接着想就会发现这种方法有一些极小的问题,但是我没法解决... 于是就再换思路... 最后在请教了出题人神仙zcq之后,终于做出来了 ...
- 【BZOJ-2809】dispatching派遣 Splay + 启发式合并
2809: [Apio2012]dispatching Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2334 Solved: 1192[Submi ...
- APIO2012派遣
2809: [Apio2012]dispatching Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1196 Solved: 586[Submit ...
- 派遣例程与IRP结构
提到派遣例程,必须理解IRP(I/O Request Package),即"输入/输出请求包"这个重要数据结构的概念.Ring3通过DeviceIoControl等函数向驱动发出I ...
- 数据结构,可并堆(左偏树):COGS [APIO2012] 派遣
796. [APIO2012] 派遣 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿. 在这个帮派里,有一名忍者被称之为Master.除了Master以外,每名忍者都有且 ...
- IRP派遣操作
IRPTrace工具跟踪IRP 派遣函数(Dispathc Funtion)是windows驱动中的重要概念.驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的.用户模式 ...
- IRP 与 派遣函数
什么是派遣函数: 派遣函数是 WIndows 驱动程序中的重要概念.驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的.也就是说,派遣函数是用来处理驱动程序提交过来的 I ...
- 《Windows驱动开发技术详解》之派遣函数
驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的.用户模式下所有对驱动程序的I/O请求,全部由操作系统转化为一个叫做IRP的数据结构,不同的IRP数据会被“派遣”到不同 ...
- [APIO 2012]派遣
Description 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿. 在这个帮派里,有一名忍者被称之为Master.除了Master以外,每名忍者都有且仅有一个上级.为 ...
随机推荐
- 小白自制Linux开发板 八. Linux音频驱动配置
不知不觉小白自制开发板系列已经到第八篇了,本篇要配置的是音频驱动,也算是硬件部分的最后一片了,积攒的文章也差不多全放完了,后续更新可能会放缓,还请见谅. 对于F1C200s是自带了多媒体处理功能的,所 ...
- Sequence Model-week1编程题3-用LSTM网络生成爵士乐
Improvise a Jazz Solo with an LSTM Network 实现使用LSTM生成音乐的模型,你可以在结束时听你自己的音乐,接下来你将会学习到: 使用LSTM生成音乐 使用深度 ...
- MySQL:基础语法-1
MySQL:基础语法-1 记录一下 MySQL 基础的一些语法,便于查询,该部分内容主要是参考:bilibili 上 黑马程序员 的课程而做的笔记,由于时间有点久了,课程地址忘记了 关于数据库的安装操 ...
- 移动端 h5 uniapp 读,写,删本地文件或sd文件
移动端 h5 uniapp 读,写,删本地文件或sd文件 应用场景: 当我们需要做离线应用或者是加载本地文件时使用到此方法.(本篇文章给大家分享访问app私有文件目录,系统公共目录,sd外置存储的文件 ...
- [no_code][Beta]项目展示博客
$( "#cnblogs_post_body" ).catalog() 团队项目链接 Beta阶段核心开发点: github 前端 github 后端 github OCR文档-含 ...
- CSP-S2021 退役记
首先大家一起恭喜博主以5pts之差与省三擦肩而过!(nmd爷去年都省三今年成功打铁了) 果然这个菜鸡一年不如一年了 upd:T3死在多测上了,随便一个40+28的人可以吊打我 Day -2: 模拟赛, ...
- ClickHouse实战
1.概述 最近有被留言关于ClickHouse的使用问题,今天笔者将为大家分享一下ClickHouse的安装细节和使用方法. 2.内容 首先安装环境如下所示: Linux:CentOS7 ClickH ...
- [个人开源]vue-code-view:一个在线编辑、实时预览的代码交互组件
组件简介 vue-code-view是一个基于 vue 2.x.轻量级的代码交互组件,在网页中实时编辑运行代码.预览效果的代码交互组件. 使用此组件, 不论 vue 页面还是 Markdown 文档中 ...
- Mac搭建以太坊私有链
记录过程与问题 一.安装 以go版本的ethereum进行安装 brew tap ethereum/ethereum brew install ethereum # 如果希望基于ethereum的de ...
- dns+nginx实现多虚拟主机
借鉴于朋友的需求,公司需要启用域名访问内部的业务系统,现实情况是内部的业务系统目前使用的是单主机,单nginx多端口的方式再运行,朋友最终想实现启用域名方式问题,且域名不需要用户手工输入端口号 两种思 ...