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以外,每名忍者都有且仅有一个上级.为 ...
随机推荐
- Hive架构及搭建方式
目录 前言 hive的基础知识 基本架构 metastore 内嵌服务和数据库 内嵌服务 服务和数据库单独部署 hcatalog 客户端 客户端的本地模式 beeline beeline的自动模式 j ...
- 【数据结构与算法Python版学习笔记】引言
学习来源 北京大学-数据结构与算法Python版 目标 了解计算机科学.程序设计和问题解决的基本概念 计算机科学是对问题本身.问题的解决.以及问题求解过程中得出的解决方案的研究.面对一 个特定问题,计 ...
- Coursera Deep Learning笔记 序列模型(三)Sequence models & Attention mechanism(序列模型和注意力机制)
参考 1. 基础模型(Basic Model) Sequence to sequence模型(Seq2Seq) 从机器翻译到语音识别方面都有着广泛的应用. 举例: 该机器翻译问题,可以使用" ...
- numpy读取本地数据和索引
1.numpy读取数据 np.loadtxt(fname,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False) 做一个 ...
- 绝世好题(DP)
题目链接:绝世好题 暴力就不用说了,和lis神似,O(n2)妥妥的挂掉,但可以得大部分分(好像是90,80)... 考虑优化,来一发非正解的优化: #include<bits/stdc++.h& ...
- 我的笔记本电脑瞬间扩大一个T的容量!
前言 不知道有多少人在家里搭建中央存储设备的,也就是NAS.这个东西在我日常生活中,存储了大量的个人资料,家人们的照片,技术的资料,还有各种高清影视剧.搭配公网的IP,可以真正做到,任何时候任何地点的 ...
- Typora和PicGo-Core搭配使用
作用:快速上传图片并获取图片 URL 链接的工具,图片存放到Gitee仓库中,在博客网站发布时不必担心图片转存失败问题 Gitee 创建一个新仓库 生成一个新令牌 生成后只显示一次,请妥善保管 Pic ...
- 挂载iscsi存储
参考连接:https://segmentfault.com/a/1190000005853387?utm_source=tag-newest 安装客户端工具,iscsi-initiator yum i ...
- 开源的分布式事务框架 springcloud Alibaba Seata 的搭建使用 一次把坑踩完。。。
seata的使用 1. Seata 概述 Seata 是 Simple Extensible Autonomous Transaction Architecture 的简写,由 feascar 改名而 ...
- jmeter 插件安装之阶梯式压测(五)
一.Jmeter插件安装 jmeter-plugins-manager-1.4.jar 下载地址:https://jmeter-plugins.org/install/Install/ 下载之后将插件 ...